package com.shoparc.shukhov;

import java.io.File;
import java.io.FileWriter;
import java.io.IOException;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;

import processing.core.*;

import javax.vecmath.Matrix4f;
import javax.vecmath.Point3f;
import javax.vecmath.Vector3f;

import org.jdom.Document;
import org.jdom.Element;
import org.jdom.JDOMException;
import org.jdom.input.SAXBuilder;
import org.jdom.output.XMLOutputter;

public class SGraph {
	ArrayList<SVert> verts = new ArrayList<SVert>();
	ArrayList<SEdge> horizontaledges = new ArrayList<SEdge>();
	ArrayList<SEdge> verticaledges = new ArrayList<SEdge>();
	ArrayList<SEdge> pleatedges = new ArrayList<SEdge>();
	ArrayList<PolyLine> lines = new ArrayList<PolyLine>();
	ArrayList<Panel> panels = new ArrayList<Panel>();
	PApplet parent;

	public SGraph(MyShukhov myShukhov) {
		parent = myShukhov;
	}

	public void addVert(Point3f p) {
		new SVert(p);
	}

	public void createLines(float max) {
		float currentZ = 0;
		while (currentZ < max) {
			contourFromPoints(currentZ);
			currentZ += 5;

		}

	}

	public void createPanels() {
		for (int i = 0; i < lines.size() - 1; i++) {
			PolyLine currentLine = lines.get(i);
			PolyLine nextLine = lines.get(i + 1);
			int maxJndex = currentLine.verts.size();

			for (int j = 0; j < maxJndex; j++) {
				Panel p = new Panel();
				p.addPoint(currentLine.verts.get(j).p);
				p.addPoint(nextLine.verts.get(j).p);
				p.addPoint(nextLine.verts.get((j + 1) % maxJndex).p);
				p.addPoint(currentLine.verts.get((j + 1) % maxJndex).p);
				
				panels.add(p);
			}
		}
	}

	public void contourFromPoints(float currentZ) {

		ArrayList<SVert> currentPoints = new ArrayList<SVert>();
		for (SVert v : verts) {
			if (Math.abs(v.p.z - currentZ) < .5) {
				currentPoints.add(v);
			}
		}
		if (!(currentPoints.size() < 3)) {
			PolyLine p = new PolyLine();
			p.plineFromUnsorted(currentPoints);
			lines.add(p);
		}
		currentZ += 5;
		System.out.println(new Date());

	}

	class PolyLine {
		ArrayList<SVert> verts = new ArrayList<SVert>();

		PolyLine() {

		}

		void render(PApplet parent) {
			parent.beginShape();

			for (SVert v : verts) {
				parent.vertex(v.p.x, v.p.y, v.p.z);

			}
			parent.vertex(verts.get(0).p.x, verts.get(0).p.y, verts.get(0).p.z);
			parent.endShape();
		}

		void plineFromUnsorted(ArrayList<SVert> unsortedVerts) {
			verts = new ArrayList<SVert>();
			SVert currentVert = unsortedVerts.get(0);
			verts.add(currentVert);
			unsortedVerts.remove(0);

			while (!unsortedVerts.isEmpty()) {
				float closestDist = 100000;
				SVert closestV = null;
				for (SVert v : unsortedVerts) {
					float currentDist = v.p.distance(currentVert.p);
					if (currentDist < closestDist) {
						closestV = v;
						closestDist = currentDist;
					}
				}

				verts.add(closestV);

				currentVert = closestV;
				unsortedVerts.remove(closestV);
			}

		}

	}

	class SVert {
		Point3f p;
		Vector3f dp;
		Vector3f ddp;
		ArrayList<SEdge> connected = new ArrayList<SEdge>();
		Boolean fixed = false;

		SVert() {
			p = new Point3f();
			dp = new Vector3f();
			ddp = new Vector3f();
			verts.add(this);
		}

		SVert(float x, float y, float z) {
			p = new Point3f(x, y, z);

			dp = new Vector3f();
			ddp = new Vector3f();
			verts.add(this);
		}

		SVert(Point3f _v) {
			p = _v;

			dp = new Vector3f();
			ddp = new Vector3f();
			verts.add(this);
		}

		void connect(SVert s1, SVert s2, boolean pleat) {
			// Check for duplicate edges.
			for (SEdge e : s1.connected) {
				if ((e.start == s1 && e.end == s2)
						|| (e.end == s1 && e.start == s2)) {
					return;
				}
			}

			// Create the edge
			if (!pleat) {
				new SEdge(s1, s2);
			} else {
				new SEdge(s1, s2, true);
			}

		}

		void disconnect(SVert s1, SVert s2) {
			for (SEdge e : s1.connected) {
				if ((e.start == s1 && e.end == s2)
						|| (e.end == s1 && e.start == s2)) {
					e.start = null;
					e.end = null;
					s1.connected.remove(e);
					s2.connected.remove(e);
					horizontaledges.remove(e);
					verticaledges.remove(e);
					pleatedges.remove(e);
					return;
				}
			}
		}

		float distance(SVert other) {
			return (p.distance(other.p));
		}

		public void render(float _scale, PApplet parent) {

			parent.beginShape(PConstants.LINES);

			parent.vertex(p.x - _scale, p.y, p.z);
			parent.vertex(p.x + _scale, p.y, p.z);
			parent.vertex(p.x, p.y - _scale, p.z);
			parent.vertex(p.x, p.y + _scale, p.z);
			parent.vertex(p.x, p.y, p.z - _scale);
			parent.vertex(p.x, p.y, p.z + _scale);

			parent.endShape();

		}

		public void connect(SVert tv, boolean pleat) {
			connect(this, tv, pleat);

		}

		public void update() {

			if (!fixed) {
				// wander(.0005f);
				// damping
				dp.scale(.995f);
				// gravity
				ddp.z += -.001f;
				// ddp.clamp(-5f, 5f);
				dp.add(ddp);
				// dp.clamp(-10f, 10f);
				// dp.z=0;
				p.add(dp);
				ddp = new Vector3f();
				// ddp.scale(-.001f, dp);
				// bounds(12, 216, -693, -472, 70, 200);

			}

		}

		void wander(float scale) {
			ddp.x += (Math.random() - .5) * scale;
			ddp.y += (Math.random() - .5) * scale;
			ddp.z += (Math.random() - .5) * scale;
		}

		void bounds(float _xmin, float _xmax, float _ymin, float _ymax,
				float _zmin, float _zmax) {
			if (p.x < _xmin) {
				p.x = _xmin + .001f;
			}
			if (p.x > _xmax) {
				p.x = _xmax - .001f;
			}
			if (p.y < _ymin) {
				p.x = _ymin + .001f;
			}
			if (p.y > _ymax) {
				p.x = _ymax - .001f;
			}
			if (p.z < _zmin) {
				p.x = _zmin + .001f;
			}
			if (p.z > _zmax) {
				p.x = _zmax - .001f;
			}

		}
	}

	class SEdge {
		SVert start, end;
		float restLength;
		boolean pleatEdge = false;

		SEdge() {
		}

		SEdge(SVert _start, SVert _end) {
			start = _start;
			end = _end;
			start.connected.add(this);
			end.connected.add(this);

			// to Pleat
			/*
			 * if(pleat){ if(Math.abs(_start.p.z-_end.p.z)>2){ restLength =
			 * _start.distance(_end) *.8f; }else{restLength = (float)
			 * (_start.distance(_end)*1.4f);} }
			 */

			// restLength = (_start.distance(_end)*.95f);
			//
			if (Math.abs(_start.p.z - _end.p.z) > 2) {
				verticaledges.add(this);
				restLength = _start.distance(_end) * .85f;
			} else {
				horizontaledges.add(this);
				restLength = (float) (_start.distance(_end) * 1f);
			}

			if (restLength < .25) {
				restLength = .25f;
			}
		}

		public SEdge(SVert _start, SVert _end, boolean b) {
			pleatEdge = true;
			start = _start;
			end = _end;
			start.connected.add(this);
			end.connected.add(this);
			pleatedges.add(this);

			if (Math.abs(_start.p.z - _end.p.z) > 2) {
				restLength = _start.distance(_end) * .9f;
			} else {
				restLength = (float) (_start.distance(_end) * 1f);
			}

			if (restLength > .25) {
				restLength = .25f;
			}
		}

		public void render(PApplet parent) {
			parent.beginShape(PConstants.LINES);

			parent.vertex(start.p.x, start.p.y, start.p.z);
			parent.vertex(end.p.x, end.p.y, end.p.z);
			parent.endShape();
		}

		public void spring(float l, float k) {

			Vector3f f = new Vector3f(start.p);
			f.sub(end.p);
			f.normalize();
			f.scale(-k * (start.p.distance(end.p) - l));
			// f.clamp(-1f, 1f);
			start.ddp.add(f);
			end.ddp.sub(f);

		}

		public void pleatSpring(float l, float k, float d) {
			Point3f startV = new Point3f(start.p.x, start.p.y, 0);
			Point3f endV = new Point3f(end.p.x, end.p.y, 0);
			float currentDist = startV.distance(endV);
			if (currentDist < d) {
				Vector3f f = new Vector3f(startV);
				f.sub(endV);
				f.normalize();
				f.scale(-k * (currentDist - d - .25f));
				start.ddp.add(f);
				end.ddp.sub(f);

			}
		}

		public float length() {
			return start.distance(end);
		}
	}

	class Panel {
		ArrayList<Point3f> boundary = new ArrayList<Point3f>();
		ArrayList<Point3f> flatBoundary = new ArrayList<Point3f>();
		Vector3f centroid;
		Vector3f avgNormal;

		Panel(ArrayList<Point3f> _boundary) {
			boundary = _boundary;
		}

		Panel() {
		}

		void addPoint(Point3f p) {
			boundary.add(p);
		}

		Vector3f getAvgNormal() {
			int maxIndex = boundary.size();
			int count = 0;
			Vector3f nAvg = new Vector3f();

			for (int i = 0; i < maxIndex; i+=2) {
				Vector3f n1 = new Vector3f(boundary.get((i+1)% maxIndex));
				n1.sub(boundary.get((i) % maxIndex));
				n1.normalize();
				Vector3f n2 = new Vector3f(boundary.get((i + 2) % maxIndex));
				n2.sub(boundary.get((i + 1) % maxIndex));
				n2.normalize();

				n1.cross(n1, n2);
				n1.normalize();
				nAvg.add(n1);
				count++;
			}
			nAvg.scale(-1f/count);

			nAvg.normalize();
			return nAvg;

		}
		
		Vector3f getAvgPoint() {
			Vector3f Avg = new Vector3f();
			int count =0;

			for (int i = 0; i < boundary.size(); i++) {
				
				Avg.add(boundary.get(i));
				count++;
			}

			Avg.scale(1f / count);
			return Avg;

		}

		/**
		 * Flattens the panel, to the plane containing points 0 and 2 and having
		 * a normal of the average normal refer to
		 * http://mathworld.wolfram.com/Line-PlaneIntersection.html for line
		 * plane intersection
		 * 
		 */
		void flatten() {
			flatBoundary = new ArrayList<Point3f>();
			


			// We first calculate three points on the plane.
			Vector3f n = getAvgNormal();
		
			/*
			Vector3f vavg = getAvgPoint();
			Vector3f v1 = new Vector3f(vavg);
			v1 = new Vector3f(boundary.get(0));
			
			Vector3f v2 = new Vector3f(boundary.get(2));
			*/

			/*
				v2.x = 1f;
				v2.y = 1f;
				v2.z = (n.z*v1.z-(n.x*(1f-v1.x))+n.y*(1f-v1.y))/n.z;  //a point lying on the plane
			*/
			
			
			Vector3f v1 = getAvgPoint();
			Vector3f v2 = new Vector3f(boundary.get(0));
			if(n.z==0){
				v2 = new Vector3f(v1.x, v1.y, v1.z+15f);
				System.out.println("vertical");
			}else{
				v2.z = (n.z*v1.z-(n.x*(v2.x-v1.x))+n.y*(v2.y-v1.y))/n.z;  //project the point up to the plane
			}
			
			
	
			Vector3f v3 = new Vector3f(v2);
			v3.sub(v1);
			v3.normalize();
			v3.cross(n, v3);
			v3.add(v1);

			
			for(int i =0; i<boundary.size(); i++){
				// for boundary point i
				// we then define two points for the ray passing through boundary
				// point i.
				Vector3f v4 = new Vector3f(boundary.get(i));
				Vector3f v5 = new Vector3f(boundary.get(i));
				v5.add(n);

				// then to find the intersection
				Matrix4f M1 = new Matrix4f(1, 1, 1, 1, v1.x, v2.x, v3.x, v4.x, v1.y, v2.y, v3.y, v4.y, v1.z, v2.z, v3.z, v4.z);
				Matrix4f M2 = new Matrix4f(1, 1, 1, 0, v1.x, v2.x, v3.x, v5.x- v4.x, v1.y, v2.y, v3.y, v5.y - v4.y, v1.z, v2.z, v3.z, v5.z - v4.z);
				float d1 = -M1.determinant();
				float d2 = -M2.determinant();
				
				float t = -M1.determinant() / M2.determinant();
				Point3f fp = new Point3f();
				fp.x = v4.x + (v5.x - v4.x) * t;
				fp.y = v4.y + (v5.y - v4.y) * t;
				fp.z = v4.z + (v5.z - v4.z) * t;

				
				flatBoundary.add(fp);
				
				
			}
			
			centroid = getAvgPoint();
			avgNormal = getAvgNormal();
			
		}

		void renderEdge() {

			parent.beginShape();

			for (Point3f p : boundary) {
				parent.vertex(p.x, p.y, p.z);

			}
			parent.vertex(boundary.get(0).x, boundary.get(0).y,
					boundary.get(0).z);
			parent.endShape();

		}

		void renderPanel() {

			for (Point3f p : boundary) {
				parent.vertex(p.x, p.y, p.z);

			}

		}

		void renderFlat() {
			parent.beginShape(PConstants.QUADS);
			for (Point3f p : flatBoundary) {
				parent.vertex(p.x, p.y, p.z);

			}
			parent.endShape();
			
			if(avgNormal!=null&&centroid!=null){
				parent.beginShape(PConstants.LINES);
				parent.vertex(centroid.x, centroid.y, centroid.z);
				parent.vertex(centroid.x+avgNormal.x*5f, centroid.y+avgNormal.y*5f, centroid.z+avgNormal.z*5f);
				parent.endShape(PConstants.LINES);
			}
		}
		
		void renderAvgNormal(){
			
		}

	}

	public void render() {
		parent.strokeWeight(.125f);
		parent.stroke(0, 0, 0);
		parent.fill(0, 0, 255);

		/*
		 * for (SVert v : verts) { v.render(.45f, parent); }
		 */

		parent.stroke(0, 0, 0);
		parent.strokeWeight(.05f);
		/*
		 * for (SEdge e : horizontaledges) { e.render(parent); }
		 */
		parent.stroke(0, 0, 0);
		parent.strokeWeight(.1f);
		for (SEdge e : verticaledges) {
			e.render(parent);
		}

		parent.stroke(0, 0, 0);
		parent.noFill();
		parent.strokeWeight(.1f);
		for (PolyLine p : lines) {
			p.render(parent);
		}

	}

	public void renderPanels() {
		parent.strokeWeight(.125f);
		parent.stroke(0, 0, 0);
		parent.fill(255, 255, 255);
		
		for (Panel p : panels) {
			
			p.renderFlat();
			
		}
		
	}

	public void renderPleat() {
		parent.stroke(0, 0, 0);
		parent.strokeWeight(.0725f);
		for (SEdge e : pleatedges) {
			e.render(parent);
		}
	}

	public void initRandom(float _xmin, float _xmax, float _ymin, float _ymax,
			float _zmin, float _zmax, int num, float delta) {
		int count = 0;
		int numTries = 0;
		while ((count < num) && (numTries < 10000)) {
			Point3f v = new Point3f(
					(float) (Math.random() * (_xmax - _xmin) + _xmin),
					(float) (Math.random() * (_ymax - _ymin) + _ymin),
					(float) (Math.random() * (_zmax - _zmin) + _zmin));
			Boolean collision = false;
			for (SVert sv : verts) {
				if (sv.p.distance(v) < delta) {
					collision = true;
					break;
				}
			}

			if (!collision) {
				SVert aVert = new SVert(v);
				count++;
			} else {
				numTries++;
			}
		}
	}

	public void initTest() {
		for (int i = 0; i < 100; i++) {

			for (int j = 0; j < 100; j++) {
				SVert v = new SVert(2 * i - 100, 2 * j - 100, 73);
				if ((i == 0) || (i == 99) || (j == 0) || (j == 99)) {

					v.fixed = true;
				}
			}
		}
	}

	public void init() {

	}

	public void initGrid(int countX, int countY, float xmin, float xmax,
			float ymin, float ymax, float z) {
		float dX = (xmax - xmin) / countX;
		float dY = (ymax - ymin) / countY;

		for (int i = 0; i < countX; i++) {
			for (int j = 0; j < countY; j++) {
				float x = xmin + dX * i;
				float y = ymin + dY * j;

				new SVert(x, y, z);
			}

		}

	}

	public void shiftTop() {
		int top = lines.size();
		float x0 = lines.get(top - 1).verts
				.get(lines.get(top - 1).verts.size() - 1).p.x;
		float y0 = lines.get(top - 1).verts
				.get(lines.get(top - 1).verts.size() - 1).p.y;
		float z0 = lines.get(top - 1).verts
				.get(lines.get(top - 1).verts.size() - 1).p.z;

		for (int i = lines.get(0).verts.size() - 1; i >= 1; i--) {
			lines.get(top - 1).verts.get(i).p.x = lines.get(top - 1).verts
					.get(i - 1).p.x;
			lines.get(top - 1).verts.get(i).p.y = lines.get(top - 1).verts
					.get(i - 1).p.y;
			lines.get(top - 1).verts.get(i).p.z = lines.get(top - 1).verts
					.get(i - 1).p.z;
		}

		lines.get(top - 1).verts.get(0).p.x = x0;
		lines.get(top - 1).verts.get(0).p.y = y0;
		lines.get(top - 1).verts.get(0).p.z = z0;

	}

	public void shiftBottom() {
		float x0 = lines.get(0).verts.get(0).p.x;
		float y0 = lines.get(0).verts.get(0).p.y;
		float z0 = lines.get(0).verts.get(0).p.z;

		for (int i = 0; i < lines.get(0).verts.size() - 1; i++) {
			lines.get(0).verts.get(i).p.x = lines.get(0).verts.get(i + 1).p.x;
			lines.get(0).verts.get(i).p.y = lines.get(0).verts.get(i + 1).p.y;
			lines.get(0).verts.get(i).p.z = lines.get(0).verts.get(i + 1).p.z;
		}
		lines.get(0).verts.get(lines.get(0).verts.size() - 1).p.x = x0;
		lines.get(0).verts.get(lines.get(0).verts.size() - 1).p.y = y0;
		lines.get(0).verts.get(lines.get(0).verts.size() - 1).p.z = z0;

	}

	public void tightenHor() {
		for (SEdge e : horizontaledges) {
			e.restLength *= .99;
		}
	}

	public void loosenHor() {
		for (SEdge e : horizontaledges) {
			e.restLength *= 1.01;
		}
	}

	public void tightenVer() {
		for (SEdge e : verticaledges) {
			e.restLength *= .99;
		}
	}

	public void loosenVer() {
		for (SEdge e : verticaledges) {
			e.restLength *= 1.01;
		}
	}

	public void shake() {
		for (SVert v : verts) {
			v.wander(.1f);
		}
	}

	public void pleat() {
		for (PolyLine p : lines) {
			for (int i = 0; i < p.verts.size(); i++) {
				int next = i + 2;
				if (next >= p.verts.size()) {
					next = i + 2 - p.verts.size();
				}
				p.verts.get(i).connect(p.verts.get(next), true);
			}
		}

	}

	public void update() {
		for (SEdge e : horizontaledges) {
			e.spring(e.restLength, .1f);
		}
		for (SEdge e : verticaledges) {
			e.spring(e.restLength, .1f);
		}
		for (SEdge e : pleatedges) {
			e.pleatSpring(e.restLength, .6f, 3);
		}

		for (SVert sv : verts) {
			sv.update();
		}

		// constrainHorizSlope(1.25f, .05f);

	}

	public void constrainHorizSlope(float delta, float mag) {
		for (PolyLine pl : lines) {
			int numVerts = pl.verts.size();
			for (int i = 0; i < numVerts; i++) {
				int next = i + 1;
				if (next == numVerts) {
					next = 0;
				}
				SVert currV = pl.verts.get(i);
				SVert nextV = pl.verts.get(next);
				if (Math.abs(currV.p.z - nextV.p.z) > delta) {
					Vector3f f = new Vector3f(currV.p);
					f.sub(nextV.p);
					f.normalize();
					f.scale(-mag * (Math.abs(currV.p.z - nextV.p.z) - delta));
					currV.ddp.add(f);
					nextV.ddp.sub(f);
				}
			}
		}

	}

	public void connect(float delta) {
		for (SVert sv : verts) {
			for (SVert tv : verts) {
				float dist = sv.distance(tv);
				if ((dist < delta) && (dist > 0.1)) {

					sv.connect(tv, false);
				}
			}
		}
	}

	public void connect(SVert v, float delta) {

		for (SVert tv : verts) {
			float dist = v.distance(tv);
			if ((dist < delta) && (dist > 0.1)) {

				v.connect(tv, false);
			}

		}
	}

	public void connectVertical(SVert v, float delta) {

		for (SVert tv : verts) {
			float dist = v.distance(tv);
			if ((dist < delta) && (dist > 0.1)) {
				if (Math.abs(v.p.z - tv.p.z) > 1)

					v.connect(tv, false);
			}

		}
	}

	public void fixPoints(ArrayList<Point3f> fixedpoints) {
		for (Point3f p : fixedpoints) {
			for (SVert v : verts) {
				if ((Math.abs(p.x - v.p.x) < 1) && (Math.abs(p.y - v.p.y) < 1)
						&& (Math.abs(p.z - v.p.z) < 1)) {
					v.fixed = true;
					v.p.z = p.z;
				}
			}
		}

	}

	public void fixEdges() {
		for (SVert sv : verts) {

			if ((Math.abs(sv.p.x - 12) < 2.5)) {
				sv.fixed = true;
				// sv.p.z = 73;
			}

			if ((Math.abs(sv.p.x - 216) < 2.5)) {
				sv.fixed = true;
				// sv.p.z = 73;
			}

		}
	}

	public void fixPoints(int option) {
		if (option == 1) {
			fixEdges();
			ArrayList<Point3f> fixedPoints = new ArrayList<Point3f>();
			// option 1
			fixedPoints.add(new Point3f(196.027131227919f, -412.661727550113f,
					95.3333333333333f));
			fixedPoints.add(new Point3f(33.4760217092233f, -412.661727550113f,
					95.3333333333333f));
			fixedPoints.add(new Point3f(85.3005854780553f, -448.641754391864f,
					77.0833333333333f));
			fixedPoints.add(new Point3f(85.3005854780553f, -443.641754391864f,
					77.0833333333333f));
			fixedPoints.add(new Point3f(85.3005854780553f, -438.641754391864f,
					77.0833333333333f));
			fixedPoints.add(new Point3f(85.3005854780553f, -433.641754391864f,
					77.0833333333333f));
			fixedPoints.add(new Point3f(85.3005854780553f, -428.641754391864f,
					77.0833333333333f));
			fixedPoints.add(new Point3f(85.3005854780553f, -423.641754391864f,
					77.0833333333333f));
			fixedPoints.add(new Point3f(85.3005854780553f, -418.641754391864f,
					77.0833333333333f));
			fixedPoints.add(new Point3f(85.3005854780553f, -413.641754391864f,
					77.0833333333333f));
			fixedPoints.add(new Point3f(85.3005854780553f, -408.641754391864f,
					77.0833333333333f));
			fixedPoints.add(new Point3f(85.3005854780553f, -403.641754391864f,
					77.0833333333333f));
			fixedPoints.add(new Point3f(85.3005854780553f, -398.641754391864f,
					77.0833333333333f));
			fixedPoints.add(new Point3f(85.3005854780553f, -393.641754391864f,
					77.0833333333333f));
			fixedPoints.add(new Point3f(85.3005854780553f, -388.641754391864f,
					77.0833333333333f));
			fixedPoints.add(new Point3f(85.3005854780553f, -383.641754391864f,
					77.0833333333333f));
			fixedPoints.add(new Point3f(85.3005854780553f, -378.641754391864f,
					77.0833333333333f));
			fixedPoints.add(new Point3f(85.3005854780553f, -373.641754391864f,
					77.0833333333333f));
			fixedPoints.add(new Point3f(88.653896136302f, -371.995065050111f,
					77.0833333333333f));
			fixedPoints.add(new Point3f(93.6538961363019f, -371.995065050111f,
					77.0833333333333f));
			fixedPoints.add(new Point3f(98.6538961363019f, -371.995065050111f,
					77.0833333333333f));
			fixedPoints.add(new Point3f(103.653896136302f, -371.995065050111f,
					77.0833333333333f));
			fixedPoints.add(new Point3f(108.653896136302f, -371.995065050111f,
					77.0833333333333f));
			fixedPoints.add(new Point3f(113.653896136302f, -371.995065050111f,
					77.0833333333333f));
			fixedPoints.add(new Point3f(118.653896136302f, -371.995065050111f,
					77.0833333333333f));
			fixedPoints.add(new Point3f(123.653896136302f, -371.995065050111f,
					77.0833333333333f));
			fixedPoints.add(new Point3f(128.653896136302f, -371.995065050111f,
					77.0833333333333f));
			fixedPoints.add(new Point3f(133.653896136302f, -371.995065050111f,
					77.0833333333333f));
			fixedPoints.add(new Point3f(138.653896136302f, -371.995065050111f,
					77.0833333333333f));
			fixedPoints.add(new Point3f(143.653896136302f, -371.995065050111f,
					77.0833333333333f));
			fixedPoints.add(new Point3f(143.977242890511f, -376.671718295901f,
					77.0833333333333f));
			fixedPoints.add(new Point3f(143.977242890511f, -381.671718295901f,
					77.0833333333333f));
			fixedPoints.add(new Point3f(143.977242890511f, -386.671718295901f,
					77.0833333333333f));
			fixedPoints.add(new Point3f(143.977242890511f, -391.671718295901f,
					77.0833333333333f));
			fixedPoints.add(new Point3f(143.977242890511f, -396.671718295901f,
					77.0833333333333f));
			fixedPoints.add(new Point3f(143.977242890511f, -401.671718295901f,
					77.0833333333333f));
			fixedPoints.add(new Point3f(143.977242890511f, -406.671718295901f,
					77.0833333333333f));
			fixedPoints.add(new Point3f(143.977242890511f, -411.671718295901f,
					77.0833333333333f));
			fixedPoints.add(new Point3f(143.977242890511f, -416.671718295901f,
					77.0833333333333f));
			fixedPoints.add(new Point3f(143.977242890511f, -421.671718295901f,
					77.0833333333333f));
			fixedPoints.add(new Point3f(143.977242890511f, -426.671718295901f,
					77.0833333333333f));
			fixedPoints.add(new Point3f(143.977242890511f, -431.671718295901f,
					77.0833333333333f));
			fixedPoints.add(new Point3f(143.977242890511f, -436.671718295901f,
					77.0833333333333f));
			fixedPoints.add(new Point3f(143.977242890511f, -441.671718295901f,
					77.0833333333333f));
			fixedPoints.add(new Point3f(143.977242890511f, -446.671718295901f,
					77.0833333333333f));
			fixedPoints.add(new Point3f(143.977242890511f, -451.671718295901f,
					77.0833333333333f));
			fixedPoints.add(new Point3f(140.300585478055f, -452.995060883445f,
					77.0833333333333f));
			fixedPoints.add(new Point3f(135.300585478055f, -452.995060883445f,
					77.0833333333333f));
			fixedPoints.add(new Point3f(130.300585478055f, -452.995060883445f,
					77.0833333333333f));
			fixedPoints.add(new Point3f(125.300585478055f, -452.995060883445f,
					77.0833333333333f));
			fixedPoints.add(new Point3f(120.300585478055f, -452.995060883445f,
					77.0833333333333f));
			fixedPoints.add(new Point3f(115.300585478055f, -452.995060883445f,
					77.0833333333333f));
			fixedPoints.add(new Point3f(110.300585478055f, -452.995060883445f,
					77.0833333333333f));
			fixedPoints.add(new Point3f(105.300585478055f, -452.995060883445f,
					77.0833333333333f));
			fixedPoints.add(new Point3f(100.300585478055f, -452.995060883445f,
					77.0833333333333f));
			fixedPoints.add(new Point3f(95.3005854780553f, -452.995060883445f,
					77.0833333333333f));
			fixedPoints.add(new Point3f(90.3005854780552f, -452.995060883445f,
					77.0833333333333f));
			fixedPoints.add(new Point3f(85.3005854780553f, -452.995060883445f,
					77.0833333333333f));
			fixedPoints.add(new Point3f(166.027131227919f, -652.661727550113f,
					125.333333333333f));
			fixedPoints.add(new Point3f(63.4760217092233f, -612.661727550113f,
					125.333333333333f));
			fixedPoints.add(new Point3f(166.027131227919f, -572.661727550113f,
					125.333333333333f));
			fixedPoints.add(new Point3f(63.4760217092233f, -552.661727550113f,
					125.333333333333f));
			fixedPoints.add(new Point3f(166.027131227919f, -512.661727550113f,
					125.333333333333f));
			fixedPoints.add(new Point3f(63.4760217092233f, -693.4691586406f,
					125.333333333333f));
			fixedPoints.add(new Point3f(63.4760217092233f, -472.661727550113f,
					125.333333333333f));
			fixPoints(fixedPoints);
		}

		if (option == 2) {
			fixEdges();
			ArrayList<Point3f> fixedPoints = new ArrayList<Point3f>();
			fixedPoints.add(new Point3f(93.4760217092233f, -572.661727550113f,
					110.888888888889f));
			fixedPoints.add(new Point3f(136.027131227919f, -612.661727550113f,
					97.2850997190362f));
			fixedPoints.add(new Point3f(93.4760217092233f, -652.661727550113f,
					106.21775873105f));
			fixedPoints.add(new Point3f(166.027131227919f, -412.661727550113f,
					74.6962434056368f));
			fixedPoints.add(new Point3f(166.027131227919f, -492.661727550113f,
					85.3333333333335f));
			fixedPoints.add(new Point3f(166.027131227919f, -572.661727550113f,
					95.1209700241013f));
			fixedPoints.add(new Point3f(63.4760217092233f, -412.661727550113f,
					73.6173984435268f));
			fixedPoints.add(new Point3f(63.4760217092233f, -532.661727550113f,
					87.170858093782f));
			fixedPoints.add(new Point3f(63.4760217092233f, -612.661727550113f,
					96.2064978606189f));
			fixedPoints.add(new Point3f(93.4760217092233f, -492.661727550113f,
					115.333333333333f));
			fixedPoints.add(new Point3f(136.027131227919f, -532.661727550113f,
					115.333333333333f));
			fixedPoints.add(new Point3f(166.027131227919f, -652.661727550113f,
					105.333333333333f));
			fixedPoints.add(new Point3f(63.4760217092233f, -693.4691586406f,
					105.333333333333f));
			fixedPoints.add(new Point3f(85.3005854780553f, -452.995060883445f,
					77.0833333333333f));
			fixedPoints.add(new Point3f(90.3005854780552f, -452.995060883445f,
					77.0833333333333f));
			fixedPoints.add(new Point3f(95.3005854780553f, -452.995060883445f,
					77.0833333333333f));
			fixedPoints.add(new Point3f(100.300585478055f, -452.995060883445f,
					77.0833333333333f));
			fixedPoints.add(new Point3f(105.300585478055f, -452.995060883445f,
					77.0833333333333f));
			fixedPoints.add(new Point3f(110.300585478055f, -452.995060883445f,
					77.0833333333333f));
			fixedPoints.add(new Point3f(115.300585478055f, -452.995060883445f,
					77.0833333333333f));
			fixedPoints.add(new Point3f(120.300585478055f, -452.995060883445f,
					77.0833333333333f));
			fixedPoints.add(new Point3f(125.300585478055f, -452.995060883445f,
					77.0833333333333f));
			fixedPoints.add(new Point3f(130.300585478055f, -452.995060883445f,
					77.0833333333333f));
			fixedPoints.add(new Point3f(135.300585478055f, -452.995060883445f,
					77.0833333333333f));
			fixedPoints.add(new Point3f(140.300585478055f, -452.995060883445f,
					77.0833333333333f));
			fixedPoints.add(new Point3f(143.977242890511f, -451.671718295901f,
					77.0833333333333f));
			fixedPoints.add(new Point3f(143.977242890511f, -446.671718295901f,
					77.0833333333333f));
			fixedPoints.add(new Point3f(143.977242890511f, -441.671718295901f,
					77.0833333333333f));
			fixedPoints.add(new Point3f(143.977242890511f, -436.671718295901f,
					77.0833333333333f));
			fixedPoints.add(new Point3f(143.977242890511f, -431.671718295901f,
					77.0833333333333f));
			fixedPoints.add(new Point3f(143.977242890511f, -426.671718295901f,
					77.0833333333333f));
			fixedPoints.add(new Point3f(143.977242890511f, -421.671718295901f,
					77.0833333333333f));
			fixedPoints.add(new Point3f(143.977242890511f, -416.671718295901f,
					77.0833333333333f));
			fixedPoints.add(new Point3f(143.977242890511f, -411.671718295901f,
					77.0833333333333f));
			fixedPoints.add(new Point3f(143.977242890511f, -406.671718295901f,
					77.0833333333333f));
			fixedPoints.add(new Point3f(143.977242890511f, -401.671718295901f,
					77.0833333333333f));
			fixedPoints.add(new Point3f(143.977242890511f, -396.671718295901f,
					77.0833333333333f));
			fixedPoints.add(new Point3f(143.977242890511f, -391.671718295901f,
					77.0833333333333f));
			fixedPoints.add(new Point3f(143.977242890511f, -386.671718295901f,
					77.0833333333333f));
			fixedPoints.add(new Point3f(143.977242890511f, -381.671718295901f,
					77.0833333333333f));
			fixedPoints.add(new Point3f(143.977242890511f, -376.671718295901f,
					77.0833333333333f));
			fixedPoints.add(new Point3f(143.653896136302f, -371.995065050111f,
					77.0833333333333f));
			fixedPoints.add(new Point3f(138.653896136302f, -371.995065050111f,
					77.0833333333333f));
			fixedPoints.add(new Point3f(133.653896136302f, -371.995065050111f,
					77.0833333333333f));
			fixedPoints.add(new Point3f(128.653896136302f, -371.995065050111f,
					77.0833333333333f));
			fixedPoints.add(new Point3f(123.653896136302f, -371.995065050111f,
					77.0833333333333f));
			fixedPoints.add(new Point3f(118.653896136302f, -371.995065050111f,
					77.0833333333333f));
			fixedPoints.add(new Point3f(113.653896136302f, -371.995065050111f,
					77.0833333333333f));
			fixedPoints.add(new Point3f(108.653896136302f, -371.995065050111f,
					77.0833333333333f));
			fixedPoints.add(new Point3f(103.653896136302f, -371.995065050111f,
					77.0833333333333f));
			fixedPoints.add(new Point3f(98.6538961363019f, -371.995065050111f,
					77.0833333333333f));
			fixedPoints.add(new Point3f(93.6538961363019f, -371.995065050111f,
					77.0833333333333f));
			fixedPoints.add(new Point3f(88.653896136302f, -371.995065050111f,
					77.0833333333333f));
			fixedPoints.add(new Point3f(85.3005854780553f, -373.641754391864f,
					77.0833333333333f));
			fixedPoints.add(new Point3f(85.3005854780553f, -378.641754391864f,
					77.0833333333333f));
			fixedPoints.add(new Point3f(85.3005854780553f, -383.641754391864f,
					77.0833333333333f));
			fixedPoints.add(new Point3f(85.3005854780553f, -388.641754391864f,
					77.0833333333333f));
			fixedPoints.add(new Point3f(85.3005854780553f, -393.641754391864f,
					77.0833333333333f));
			fixedPoints.add(new Point3f(85.3005854780553f, -398.641754391864f,
					77.0833333333333f));
			fixedPoints.add(new Point3f(85.3005854780553f, -403.641754391864f,
					77.0833333333333f));
			fixedPoints.add(new Point3f(85.3005854780553f, -408.641754391864f,
					77.0833333333333f));
			fixedPoints.add(new Point3f(85.3005854780553f, -413.641754391864f,
					77.0833333333333f));
			fixedPoints.add(new Point3f(85.3005854780553f, -418.641754391864f,
					77.0833333333333f));
			fixedPoints.add(new Point3f(85.3005854780553f, -423.641754391864f,
					77.0833333333333f));
			fixedPoints.add(new Point3f(85.3005854780553f, -428.641754391864f,
					77.0833333333333f));
			fixedPoints.add(new Point3f(85.3005854780553f, -433.641754391864f,
					77.0833333333333f));
			fixedPoints.add(new Point3f(85.3005854780553f, -438.641754391864f,
					77.0833333333333f));
			fixedPoints.add(new Point3f(85.3005854780553f, -443.641754391864f,
					77.0833333333333f));
			fixedPoints.add(new Point3f(85.3005854780553f, -448.641754391864f,
					77.0833333333333f));
			fixPoints(fixedPoints);
		}

		// option3

		if (option == 3) {
			fixEdges();
			ArrayList<Point3f> fixedPoints = new ArrayList<Point3f>();
			fixedPoints.add(new Point3f(196.027131227919f, -432.661727550113f,
					65.333333333333f));
			fixedPoints.add(new Point3f(196.027131227919f, -552.661727550113f,
					65.333333333333f));
			fixedPoints.add(new Point3f(63.4760217092233f, -552.661727550113f,
					65.333333333333f));
			fixedPoints.add(new Point3f(136.027131227919f, -612.661727550113f,
					107.333333333333f));
			fixedPoints.add(new Point3f(63.4760217092233f, -612.661727550113f,
					107.333333333333f));
			fixedPoints.add(new Point3f(136.027131227919f, -552.661727550113f,
					107.333333333333f));
			fixedPoints.add(new Point3f(136.027131227919f, -672.661727550113f,
					107.333333333333f));
			fixedPoints.add(new Point3f(63.4760217092233f, -672.661727550113f,
					107.333333333333f));
			fixedPoints.add(new Point3f(136.027131227919f, -492.661727550113f,
					107.333333333333f));
			fixedPoints.add(new Point3f(63.4760217092233f, -492.661727550113f,
					107.333333333333f));
			fixedPoints.add(new Point3f(196.027131227919f, -492.661727550113f,
					107.333333333333f));
			fixedPoints.add(new Point3f(196.027131227919f, -612.661727550113f,
					107.333333333333f));
			fixedPoints.add(new Point3f(196.027131227919f, -672.661727550113f,
					107.333333333333f));
			fixedPoints.add(new Point3f(63.4760217092233f, -432.661727550113f,
					107.333333333333f));
			fixedPoints.add(new Point3f(63.4760217092233f, -372.661727550113f,
					107.333333333333f));
			fixedPoints.add(new Point3f(196.027131227919f, -372.661727550113f,
					107.333333333333f));
			fixedPoints.add(new Point3f(85.3005854780553f, -448.641754391864f,
					77.0833333333333f));
			fixedPoints.add(new Point3f(85.3005854780553f, -443.641754391864f,
					77.0833333333333f));
			fixedPoints.add(new Point3f(85.3005854780553f, -438.641754391864f,
					77.0833333333333f));
			fixedPoints.add(new Point3f(85.3005854780553f, -433.641754391864f,
					77.0833333333333f));
			fixedPoints.add(new Point3f(85.3005854780553f, -428.641754391864f,
					77.0833333333333f));
			fixedPoints.add(new Point3f(85.3005854780553f, -423.641754391864f,
					77.0833333333333f));
			fixedPoints.add(new Point3f(85.3005854780553f, -418.641754391864f,
					77.0833333333333f));
			fixedPoints.add(new Point3f(85.3005854780553f, -413.641754391864f,
					77.0833333333333f));
			fixedPoints.add(new Point3f(85.3005854780553f, -408.641754391864f,
					77.0833333333333f));
			fixedPoints.add(new Point3f(85.3005854780553f, -403.641754391864f,
					77.0833333333333f));
			fixedPoints.add(new Point3f(85.3005854780553f, -398.641754391864f,
					77.0833333333333f));
			fixedPoints.add(new Point3f(85.3005854780553f, -393.641754391864f,
					77.0833333333333f));
			fixedPoints.add(new Point3f(85.3005854780553f, -388.641754391864f,
					77.0833333333333f));
			fixedPoints.add(new Point3f(85.3005854780553f, -383.641754391864f,
					77.0833333333333f));
			fixedPoints.add(new Point3f(85.3005854780553f, -378.641754391864f,
					77.0833333333333f));
			fixedPoints.add(new Point3f(85.3005854780553f, -373.641754391864f,
					77.0833333333333f));
			fixedPoints.add(new Point3f(88.653896136302f, -371.995065050111f,
					77.0833333333333f));
			fixedPoints.add(new Point3f(93.6538961363019f, -371.995065050111f,
					77.0833333333333f));
			fixedPoints.add(new Point3f(98.6538961363019f, -371.995065050111f,
					77.0833333333333f));
			fixedPoints.add(new Point3f(103.653896136302f, -371.995065050111f,
					77.0833333333333f));
			fixedPoints.add(new Point3f(108.653896136302f, -371.995065050111f,
					77.0833333333333f));
			fixedPoints.add(new Point3f(113.653896136302f, -371.995065050111f,
					77.0833333333333f));
			fixedPoints.add(new Point3f(118.653896136302f, -371.995065050111f,
					77.0833333333333f));
			fixedPoints.add(new Point3f(123.653896136302f, -371.995065050111f,
					77.0833333333333f));
			fixedPoints.add(new Point3f(128.653896136302f, -371.995065050111f,
					77.0833333333333f));
			fixedPoints.add(new Point3f(133.653896136302f, -371.995065050111f,
					77.0833333333333f));
			fixedPoints.add(new Point3f(138.653896136302f, -371.995065050111f,
					77.0833333333333f));
			fixedPoints.add(new Point3f(143.653896136302f, -371.995065050111f,
					77.0833333333333f));
			fixedPoints.add(new Point3f(143.977242890511f, -376.671718295901f,
					77.0833333333333f));
			fixedPoints.add(new Point3f(143.977242890511f, -381.671718295901f,
					77.0833333333333f));
			fixedPoints.add(new Point3f(143.977242890511f, -386.671718295901f,
					77.0833333333333f));
			fixedPoints.add(new Point3f(143.977242890511f, -391.671718295901f,
					77.0833333333333f));
			fixedPoints.add(new Point3f(143.977242890511f, -396.671718295901f,
					77.0833333333333f));
			fixedPoints.add(new Point3f(143.977242890511f, -401.671718295901f,
					77.0833333333333f));
			fixedPoints.add(new Point3f(143.977242890511f, -406.671718295901f,
					77.0833333333333f));
			fixedPoints.add(new Point3f(143.977242890511f, -411.671718295901f,
					77.0833333333333f));
			fixedPoints.add(new Point3f(143.977242890511f, -416.671718295901f,
					77.0833333333333f));
			fixedPoints.add(new Point3f(143.977242890511f, -421.671718295901f,
					77.0833333333333f));
			fixedPoints.add(new Point3f(143.977242890511f, -426.671718295901f,
					77.0833333333333f));
			fixedPoints.add(new Point3f(143.977242890511f, -431.671718295901f,
					77.0833333333333f));
			fixedPoints.add(new Point3f(143.977242890511f, -436.671718295901f,
					77.0833333333333f));
			fixedPoints.add(new Point3f(143.977242890511f, -441.671718295901f,
					77.0833333333333f));
			fixedPoints.add(new Point3f(143.977242890511f, -446.671718295901f,
					77.0833333333333f));
			fixedPoints.add(new Point3f(143.977242890511f, -451.671718295901f,
					77.0833333333333f));
			fixedPoints.add(new Point3f(140.300585478055f, -452.995060883445f,
					77.0833333333333f));
			fixedPoints.add(new Point3f(135.300585478055f, -452.995060883445f,
					77.0833333333333f));
			fixedPoints.add(new Point3f(130.300585478055f, -452.995060883445f,
					77.0833333333333f));
			fixedPoints.add(new Point3f(125.300585478055f, -452.995060883445f,
					77.0833333333333f));
			fixedPoints.add(new Point3f(120.300585478055f, -452.995060883445f,
					77.0833333333333f));
			fixedPoints.add(new Point3f(115.300585478055f, -452.995060883445f,
					77.0833333333333f));
			fixedPoints.add(new Point3f(110.300585478055f, -452.995060883445f,
					77.0833333333333f));
			fixedPoints.add(new Point3f(105.300585478055f, -452.995060883445f,
					77.0833333333333f));
			fixedPoints.add(new Point3f(100.300585478055f, -452.995060883445f,
					77.0833333333333f));
			fixedPoints.add(new Point3f(95.3005854780553f, -452.995060883445f,
					77.0833333333333f));
			fixedPoints.add(new Point3f(90.3005854780552f, -452.995060883445f,
					77.0833333333333f));
			fixedPoints.add(new Point3f(85.3005854780553f, -452.995060883445f,
					77.0833333333333f));
			fixPoints(fixedPoints);

		}

		// option 4
		if (option == 4) {
			fixEdges();
			ArrayList<Point3f> fixedPoints = new ArrayList<Point3f>();
			fixedPoints.add(new Point3f(196.027131227919f, -332.661727550113f,
					83.3333333333332f));
			fixedPoints.add(new Point3f(196.027131227919f, -332.661727550113f,
					83.3333333333332f));
			fixedPoints.add(new Point3f(161.327205669647f, -341.200562052324f,
					73.8333333333332f));
			fixedPoints.add(new Point3f(178.677168448783f, -336.931144801218f,
					78.5833333333332f));
			fixedPoints.add(new Point3f(50.8259844883591f, -368.392310299007f,
					86.5833333333332f));
			fixedPoints.add(new Point3f(68.175947267495f, -364.122893047902f,
					81.8333333333332f));
			fixedPoints.add(new Point3f(178.677168448783f, -416.931144801218f,
					86.5833333333332f));
			fixedPoints.add(new Point3f(161.327205669647f, -421.200562052324f,
					81.8333333333332f));
			fixedPoints.add(new Point3f(68.175947267495f, -444.122893047902f,
					89.8333333333332f));
			fixedPoints.add(new Point3f(50.8259844883591f, -448.392310299007f,
					94.5833333333332f));
			fixedPoints.add(new Point3f(33.4760217092233f, -372.661727550113f,
					91.3333333333332f));
			fixedPoints.add(new Point3f(50.750876298834f, -376.912662444562f,
					86.5833333333332f));
			fixedPoints.add(new Point3f(68.0257308884446f, -381.163597339011f,
					81.8333333333332f));
			fixedPoints.add(new Point3f(85.3005854780552f, -385.41453223346f,
					77.0833333333333f));
			fixedPoints.add(new Point3f(143.977242890511f, -399.853475796797f,
					77.0833333333333f));
			fixedPoints.add(new Point3f(161.327205669647f, -404.122893047902f,
					81.8333333333332f));
			fixedPoints.add(new Point3f(178.677168448783f, -408.392310299007f,
					86.5833333333332f));
			fixedPoints.add(new Point3f(196.027131227919f, -412.661727550113f,
					91.3333333333332f));
			fixedPoints.add(new Point3f(136.712836578865f, -665.995060883446f,
					107.333333333333f));
			fixedPoints.add(new Point3f(166.369983903392f, -659.328394216779f,
					107.333333333333f));
			fixedPoints.add(new Point3f(58.0025775575949f, -685.995060883446f,
					107.333333333333f));
			fixedPoints.add(new Point3f(82.5291334059665f, -679.32839421678f,
					107.333333333333f));
			fixedPoints.add(new Point3f(107.055689254338f, -672.661727550113f,
					107.333333333333f));
			fixedPoints.add(new Point3f(33.4760217092233f, -692.661727550113f,
					107.333333333333f));
			fixedPoints.add(new Point3f(136.712836578865f, -639.328394216779f,
					107.333333333333f));
			fixedPoints.add(new Point3f(166.369983903392f, -645.995060883446f,
					107.333333333333f));
			fixedPoints.add(new Point3f(196.027131227919f, -652.661727550113f,
					107.333333333333f));
			fixedPoints.add(new Point3f(33.4760217092233f, -612.661727550113f,
					107.333333333333f));
			fixedPoints.add(new Point3f(58.0025775575949f, -619.328394216779f,
					107.333333333333f));
			fixedPoints.add(new Point3f(82.5291334059666f, -625.995060883446f,
					107.333333333333f));
			fixedPoints.add(new Point3f(107.055689254338f, -632.661727550113f,
					107.333333333333f));
			fixedPoints.add(new Point3f(107.055689254338f, -592.661727550113f,
					107.333333333333f));
			fixedPoints.add(new Point3f(82.5291334059665f, -599.32839421678f,
					107.333333333333f));
			fixedPoints.add(new Point3f(58.0025775575949f, -605.995060883446f,
					107.333333333333f));
			fixedPoints.add(new Point3f(166.369983903392f, -579.328394216779f,
					107.333333333333f));
			fixedPoints.add(new Point3f(136.712836578865f, -585.995060883446f,
					107.333333333333f));
			fixedPoints.add(new Point3f(107.055689254338f, -552.661727550113f,
					107.333333333333f));
			fixedPoints.add(new Point3f(136.712836578865f, -559.328394216779f,
					107.333333333333f));
			fixedPoints.add(new Point3f(166.369983903392f, -565.995060883446f,
					107.333333333333f));
			fixedPoints.add(new Point3f(58.0025775575949f, -539.32839421678f,
					107.333333333333f));
			fixedPoints.add(new Point3f(82.5291334059665f, -545.995060883446f,
					107.333333333333f));
			fixedPoints.add(new Point3f(82.5291334059665f, -519.32839421678f,
					107.333333333333f));
			fixedPoints.add(new Point3f(58.002577557595f, -525.995060883446f,
					107.333333333333f));
			fixedPoints.add(new Point3f(196.027131227919f, -492.661727550113f,
					107.333333333333f));
			fixedPoints.add(new Point3f(166.369983903392f, -499.328394216779f,
					107.333333333333f));
			fixedPoints.add(new Point3f(136.712836578865f, -505.995060883446f,
					107.333333333333f));
			fixedPoints.add(new Point3f(107.055689254338f, -512.661727550113f,
					107.333333333333f));
			fixedPoints.add(new Point3f(136.712836578865f, -479.328394216779f,
					105.268579612206f));
			fixedPoints.add(new Point3f(166.369983903392f, -485.995060883446f,
					106.300956472769f));
			fixedPoints.add(new Point3f(58.0025775575948f, -459.328394216779f,
					100.967623139436f));
			fixedPoints.add(new Point3f(82.5291334059665f, -465.995060883446f,
					102.601912945539f));
			fixedPoints.add(new Point3f(107.055689254338f, -472.661727550113f,
					104.236202751642f));
			fixedPoints.add(new Point3f(33.4760217092233f, -452.661727550113f,
					99.3333333333332f));
			fixedPoints.add(new Point3f(196.027131227919f, -412.661727550113f,
					91.3333333333332f));
			fixedPoints.add(new Point3f(33.4760217092233f, -372.661727550113f,
					91.3333333333332f));
			fixedPoints.add(new Point3f(33.4760217092233f, -532.661727550113f,
					107.333333333333f));
			fixedPoints.add(new Point3f(196.027131227919f, -572.661727550113f,
					107.333333333333f));
			fixedPoints.add(new Point3f(85.3005854780553f, -452.995060883445f,
					77.0833333333333f));
			fixedPoints.add(new Point3f(90.3005854780552f, -452.995060883445f,
					77.0833333333333f));
			fixedPoints.add(new Point3f(95.3005854780553f, -452.995060883445f,
					77.0833333333333f));
			fixedPoints.add(new Point3f(100.300585478055f, -452.995060883445f,
					77.0833333333333f));
			fixedPoints.add(new Point3f(105.300585478055f, -452.995060883445f,
					77.0833333333333f));
			fixedPoints.add(new Point3f(110.300585478055f, -452.995060883445f,
					77.0833333333333f));
			fixedPoints.add(new Point3f(115.300585478055f, -452.995060883445f,
					77.0833333333333f));
			fixedPoints.add(new Point3f(120.300585478055f, -452.995060883445f,
					77.0833333333333f));
			fixedPoints.add(new Point3f(125.300585478055f, -452.995060883445f,
					77.0833333333333f));
			fixedPoints.add(new Point3f(130.300585478055f, -452.995060883445f,
					77.0833333333333f));
			fixedPoints.add(new Point3f(135.300585478055f, -452.995060883445f,
					77.0833333333333f));
			fixedPoints.add(new Point3f(140.300585478055f, -452.995060883445f,
					77.0833333333333f));
			fixedPoints.add(new Point3f(143.977242890511f, -451.671718295901f,
					77.0833333333333f));
			fixedPoints.add(new Point3f(143.977242890511f, -446.671718295901f,
					77.0833333333333f));
			fixedPoints.add(new Point3f(143.977242890511f, -441.671718295901f,
					77.0833333333333f));
			fixedPoints.add(new Point3f(143.977242890511f, -436.671718295901f,
					77.0833333333333f));
			fixedPoints.add(new Point3f(143.977242890511f, -431.671718295901f,
					77.0833333333333f));
			fixedPoints.add(new Point3f(143.977242890511f, -426.671718295901f,
					77.0833333333333f));
			fixedPoints.add(new Point3f(143.977242890511f, -421.671718295901f,
					77.0833333333333f));
			fixedPoints.add(new Point3f(143.977242890511f, -416.671718295901f,
					77.0833333333333f));
			fixedPoints.add(new Point3f(143.977242890511f, -411.671718295901f,
					77.0833333333333f));
			fixedPoints.add(new Point3f(143.977242890511f, -406.671718295901f,
					77.0833333333333f));
			fixedPoints.add(new Point3f(143.977242890511f, -401.671718295901f,
					77.0833333333333f));
			fixedPoints.add(new Point3f(143.977242890511f, -396.671718295901f,
					77.0833333333333f));
			fixedPoints.add(new Point3f(143.977242890511f, -391.671718295901f,
					77.0833333333333f));
			fixedPoints.add(new Point3f(143.977242890511f, -386.671718295901f,
					77.0833333333333f));
			fixedPoints.add(new Point3f(143.977242890511f, -381.671718295901f,
					77.0833333333333f));
			fixedPoints.add(new Point3f(143.977242890511f, -376.671718295901f,
					77.0833333333333f));
			fixedPoints.add(new Point3f(143.653896136302f, -371.995065050111f,
					77.0833333333333f));
			fixedPoints.add(new Point3f(138.653896136302f, -371.995065050111f,
					77.0833333333333f));
			fixedPoints.add(new Point3f(133.653896136302f, -371.995065050111f,
					77.0833333333333f));
			fixedPoints.add(new Point3f(128.653896136302f, -371.995065050111f,
					77.0833333333333f));
			fixedPoints.add(new Point3f(123.653896136302f, -371.995065050111f,
					77.0833333333333f));
			fixedPoints.add(new Point3f(118.653896136302f, -371.995065050111f,
					77.0833333333333f));
			fixedPoints.add(new Point3f(113.653896136302f, -371.995065050111f,
					77.0833333333333f));
			fixedPoints.add(new Point3f(108.653896136302f, -371.995065050111f,
					77.0833333333333f));
			fixedPoints.add(new Point3f(103.653896136302f, -371.995065050111f,
					77.0833333333333f));
			fixedPoints.add(new Point3f(98.6538961363019f, -371.995065050111f,
					77.0833333333333f));
			fixedPoints.add(new Point3f(93.6538961363019f, -371.995065050111f,
					77.0833333333333f));
			fixedPoints.add(new Point3f(88.653896136302f, -371.995065050111f,
					77.0833333333333f));
			fixedPoints.add(new Point3f(85.3005854780553f, -373.641754391864f,
					77.0833333333333f));
			fixedPoints.add(new Point3f(85.3005854780553f, -378.641754391864f,
					77.0833333333333f));
			fixedPoints.add(new Point3f(85.3005854780553f, -383.641754391864f,
					77.0833333333333f));
			fixedPoints.add(new Point3f(85.3005854780553f, -388.641754391864f,
					77.0833333333333f));
			fixedPoints.add(new Point3f(85.3005854780553f, -393.641754391864f,
					77.0833333333333f));
			fixedPoints.add(new Point3f(85.3005854780553f, -398.641754391864f,
					77.0833333333333f));
			fixedPoints.add(new Point3f(85.3005854780553f, -403.641754391864f,
					77.0833333333333f));
			fixedPoints.add(new Point3f(85.3005854780553f, -408.641754391864f,
					77.0833333333333f));
			fixedPoints.add(new Point3f(85.3005854780553f, -413.641754391864f,
					77.0833333333333f));
			fixedPoints.add(new Point3f(85.3005854780553f, -418.641754391864f,
					77.0833333333333f));
			fixedPoints.add(new Point3f(85.3005854780553f, -423.641754391864f,
					77.0833333333333f));
			fixedPoints.add(new Point3f(85.3005854780553f, -428.641754391864f,
					77.0833333333333f));
			fixedPoints.add(new Point3f(85.3005854780553f, -433.641754391864f,
					77.0833333333333f));
			fixedPoints.add(new Point3f(85.3005854780553f, -438.641754391864f,
					77.0833333333333f));
			fixedPoints.add(new Point3f(85.3005854780553f, -443.641754391864f,
					77.0833333333333f));
			fixedPoints.add(new Point3f(85.3005854780553f, -448.641754391864f,
					77.0833333333333f));

			fixPoints(fixedPoints);

		}

		// option 5
		if (option == 5) {
			fixEdges();
			ArrayList<Point3f> fixedPoints = new ArrayList<Point3f>();
			fixedPoints.add(new Point3f(144.584379927077f, -704.070711690519f,
					84.4166666666665f));
			fixedPoints.add(new Point3f(146.265523126918f, -706.448207204025f,
					84.4166666666665f));
			fixedPoints.add(new Point3f(147.946666326759f, -708.825702717532f,
					84.4166666666665f));
			fixedPoints.add(new Point3f(149.6278095266f, -711.203198231038f,
					84.4166666666665f));
			fixedPoints.add(new Point3f(180.36577937394f, -711.203198231038f,
					84.4166666666665f));
			fixedPoints.add(new Point3f(182.046922573781f, -708.825702717532f,
					84.4166666666665f));
			fixedPoints.add(new Point3f(183.728065773622f, -706.448207204025f,
					84.4166666666665f));
			fixedPoints.add(new Point3f(185.409208973463f, -704.070711690519f,
					84.4166666666665f));
			fixedPoints.add(new Point3f(144.584379927077f, -699.070711690519f,
					89.4166666666665f));
			fixedPoints.add(new Point3f(148.622545730873f, -704.781540537359f,
					89.4166666666665f));
			fixedPoints.add(new Point3f(152.660711534669f, -710.492369384198f,
					89.4166666666665f));
			fixedPoints.add(new Point3f(156.698877338465f, -716.203198231038f,
					89.4166666666665f));
			fixedPoints.add(new Point3f(168.656192925369f, -675.378369184651f,
					89.4166666666665f));
			fixedPoints.add(new Point3f(166.21659394197f, -675.378369184651f,
					89.4166666666665f));
			fixedPoints.add(new Point3f(163.77699495857f, -675.378369184651f,
					89.4166666666665f));
			fixedPoints.add(new Point3f(161.337395975171f, -675.378369184651f,
					89.4166666666665f));
			fixedPoints.add(new Point3f(173.294711562075f, -716.203198231038f,
					89.4166666666665f));
			fixedPoints.add(new Point3f(177.332877365871f, -710.492369384198f,
					89.4166666666665f));
			fixedPoints.add(new Point3f(181.371043169667f, -704.781540537359f,
					89.4166666666665f));
			fixedPoints.add(new Point3f(185.409208973463f, -699.070711690519f,
					89.4166666666665f));
			fixedPoints.add(new Point3f(144.584379927077f, -694.07071169052f,
					94.4166666666665f));
			fixedPoints.add(new Point3f(150.979568334828f, -703.114873870692f,
					94.4166666666665f));
			fixedPoints.add(new Point3f(157.37475674258f, -712.159036050865f,
					94.4166666666665f));
			fixedPoints.add(new Point3f(163.769945150331f, -721.203198231038f,
					94.4166666666665f));
			fixedPoints.add(new Point3f(175.727260737235f, -680.378369184651f,
					94.4166666666665f));
			fixedPoints.add(new Point3f(168.573616545925f, -680.378369184651f,
					94.4166666666665f));
			fixedPoints.add(new Point3f(161.419972354615f, -680.378369184651f,
					94.4166666666665f));
			fixedPoints.add(new Point3f(154.266328163305f, -680.378369184651f,
					94.4166666666665f));
			fixedPoints.add(new Point3f(166.22364375021f, -721.203198231038f,
					94.4166666666665f));
			fixedPoints.add(new Point3f(172.618832157961f, -712.159036050865f,
					94.4166666666665f));
			fixedPoints.add(new Point3f(179.014020565712f, -703.114873870692f,
					94.4166666666665f));
			fixedPoints.add(new Point3f(185.409208973463f, -694.070711690519f,
					94.4166666666665f));
			fixedPoints.add(new Point3f(144.584379927077f, -689.07071169052f,
					99.4166666666665f));
			fixedPoints.add(new Point3f(151.388518101475f, -698.693216177013f,
					99.4166666666665f));
			fixedPoints.add(new Point3f(158.192656275873f, -708.315720663507f,
					99.4166666666665f));
			fixedPoints.add(new Point3f(164.99679445027f, -717.93822515f,
					99.4166666666665f));
			fixedPoints.add(new Point3f(182.798328549101f, -685.378369184652f,
					99.4166666666665f));
			fixedPoints.add(new Point3f(170.93063914988f, -685.378369184652f,
					99.4166666666665f));
			fixedPoints.add(new Point3f(159.06294975066f, -685.378369184652f,
					99.4166666666665f));
			fixedPoints.add(new Point3f(147.19526035144f, -685.378369184651f,
					99.4166666666665f));
			fixedPoints.add(new Point3f(164.99679445027f, -717.93822515f,
					99.4166666666665f));
			fixedPoints.add(new Point3f(171.800932624668f, -708.315720663507f,
					99.4166666666665f));
			fixedPoints.add(new Point3f(178.605070799066f, -698.693216177013f,
					99.4166666666665f));
			fixedPoints.add(new Point3f(185.409208973463f, -689.070711690519f,
					99.4166666666665f));
			fixedPoints.add(new Point3f(149.04456731458f, -690.378369184652f,
					104.416666666667f));
			fixedPoints.add(new Point3f(154.36197635981f, -697.898321173101f,
					104.416666666667f));
			fixedPoints.add(new Point3f(159.67938540504f, -705.418273161551f,
					104.416666666667f));
			fixedPoints.add(new Point3f(164.99679445027f, -712.93822515f,
					104.416666666667f));
			fixedPoints.add(new Point3f(180.94902158596f, -690.378369184652f,
					104.416666666667f));
			fixedPoints.add(new Point3f(170.3142034955f, -690.378369184652f,
					104.416666666667f));
			fixedPoints.add(new Point3f(159.67938540504f, -690.378369184652f,
					104.416666666667f));
			fixedPoints.add(new Point3f(149.04456731458f, -690.378369184652f,
					104.416666666667f));
			fixedPoints.add(new Point3f(164.99679445027f, -712.93822515f,
					104.416666666667f));
			fixedPoints.add(new Point3f(170.3142034955f, -705.418273161551f,
					104.416666666667f));
			fixedPoints.add(new Point3f(175.63161254073f, -697.898321173101f,
					104.416666666667f));
			fixedPoints.add(new Point3f(180.94902158596f, -690.378369184652f,
					104.416666666667f));
			fixedPoints.add(new Point3f(156.115635126446f, -695.378369184652f,
					109.416666666667f));
			fixedPoints.add(new Point3f(159.07602156772f, -699.564987839768f,
					109.416666666667f));
			fixedPoints.add(new Point3f(162.036408008995f, -703.751606494884f,
					109.416666666667f));
			fixedPoints.add(new Point3f(164.99679445027f, -707.938225150001f,
					109.416666666667f));
			fixedPoints.add(new Point3f(173.877953774095f, -695.378369184652f,
					109.416666666667f));
			fixedPoints.add(new Point3f(167.957180891545f, -695.378369184652f,
					109.416666666667f));
			fixedPoints.add(new Point3f(162.036408008995f, -695.378369184652f,
					109.416666666667f));
			fixedPoints.add(new Point3f(156.115635126446f, -695.378369184652f,
					109.416666666667f));
			fixedPoints.add(new Point3f(164.99679445027f, -707.938225150001f,
					109.416666666667f));
			fixedPoints.add(new Point3f(167.957180891545f, -703.751606494884f,
					109.416666666667f));
			fixedPoints.add(new Point3f(170.91756733282f, -699.564987839768f,
					109.416666666667f));
			fixedPoints.add(new Point3f(173.877953774095f, -695.378369184652f,
					109.416666666667f));
			fixedPoints.add(new Point3f(163.186702938311f, -700.378369184652f,
					114.416666666667f));
			fixedPoints.add(new Point3f(163.790066775631f, -701.231654506435f,
					114.416666666667f));
			fixedPoints.add(new Point3f(164.393430612951f, -702.084939828218f,
					114.416666666667f));
			fixedPoints.add(new Point3f(164.99679445027f, -702.938225150001f,
					114.416666666667f));
			fixedPoints.add(new Point3f(166.806885962229f, -700.378369184652f,
					114.416666666667f));
			fixedPoints.add(new Point3f(165.60015828759f, -700.378369184652f,
					114.416666666667f));
			fixedPoints.add(new Point3f(164.393430612951f, -700.378369184652f,
					114.416666666667f));
			fixedPoints.add(new Point3f(163.186702938311f, -700.378369184652f,
					114.416666666667f));
			fixedPoints.add(new Point3f(164.99679445027f, -702.938225150001f,
					114.416666666667f));
			fixedPoints.add(new Point3f(165.60015828759f, -702.084939828218f,
					114.416666666667f));
			fixedPoints.add(new Point3f(166.20352212491f, -701.231654506435f,
					114.416666666667f));
			fixedPoints.add(new Point3f(166.806885962229f, -700.378369184652f,
					114.416666666667f));
			fixedPoints.add(new Point3f(85.3005854780553f, -448.641754391864f,
					78.0833333333333f));
			fixedPoints.add(new Point3f(85.3005854780553f, -443.641754391864f,
					78.0833333333333f));
			fixedPoints.add(new Point3f(85.3005854780553f, -438.641754391864f,
					78.0833333333333f));
			fixedPoints.add(new Point3f(85.3005854780553f, -433.641754391864f,
					78.0833333333333f));
			fixedPoints.add(new Point3f(85.3005854780553f, -428.641754391864f,
					78.0833333333333f));
			fixedPoints.add(new Point3f(85.3005854780553f, -423.641754391864f,
					78.0833333333333f));
			fixedPoints.add(new Point3f(85.3005854780553f, -418.641754391864f,
					78.0833333333333f));
			fixedPoints.add(new Point3f(85.3005854780553f, -413.641754391864f,
					78.0833333333333f));
			fixedPoints.add(new Point3f(85.3005854780553f, -408.641754391864f,
					78.0833333333333f));
			fixedPoints.add(new Point3f(85.3005854780553f, -403.641754391864f,
					78.0833333333333f));
			fixedPoints.add(new Point3f(85.3005854780553f, -398.641754391864f,
					78.0833333333333f));
			fixedPoints.add(new Point3f(85.3005854780553f, -393.641754391864f,
					78.0833333333333f));
			fixedPoints.add(new Point3f(85.3005854780553f, -388.641754391864f,
					78.0833333333333f));
			fixedPoints.add(new Point3f(85.3005854780553f, -383.641754391864f,
					78.0833333333333f));
			fixedPoints.add(new Point3f(85.3005854780553f, -378.641754391864f,
					78.0833333333333f));
			fixedPoints.add(new Point3f(85.3005854780553f, -373.641754391864f,
					78.0833333333333f));
			fixedPoints.add(new Point3f(88.653896136302f, -371.995065050111f,
					78.0833333333333f));
			fixedPoints.add(new Point3f(93.6538961363019f, -371.995065050111f,
					78.0833333333333f));
			fixedPoints.add(new Point3f(98.6538961363019f, -371.995065050111f,
					78.0833333333333f));
			fixedPoints.add(new Point3f(103.653896136302f, -371.995065050111f,
					78.0833333333333f));
			fixedPoints.add(new Point3f(108.653896136302f, -371.995065050111f,
					78.0833333333333f));
			fixedPoints.add(new Point3f(113.653896136302f, -371.995065050111f,
					78.0833333333333f));
			fixedPoints.add(new Point3f(118.653896136302f, -371.995065050111f,
					78.0833333333333f));
			fixedPoints.add(new Point3f(123.653896136302f, -371.995065050111f,
					78.0833333333333f));
			fixedPoints.add(new Point3f(128.653896136302f, -371.995065050111f,
					78.0833333333333f));
			fixedPoints.add(new Point3f(133.653896136302f, -371.995065050111f,
					78.0833333333333f));
			fixedPoints.add(new Point3f(138.653896136302f, -371.995065050111f,
					78.0833333333333f));
			fixedPoints.add(new Point3f(143.653896136302f, -371.995065050111f,
					78.0833333333333f));
			fixedPoints.add(new Point3f(143.977242890511f, -376.671718295901f,
					78.0833333333333f));
			fixedPoints.add(new Point3f(143.977242890511f, -381.671718295901f,
					78.0833333333333f));
			fixedPoints.add(new Point3f(143.977242890511f, -386.671718295901f,
					78.0833333333333f));
			fixedPoints.add(new Point3f(143.977242890511f, -391.671718295901f,
					78.0833333333333f));
			fixedPoints.add(new Point3f(143.977242890511f, -396.671718295901f,
					78.0833333333333f));
			fixedPoints.add(new Point3f(143.977242890511f, -401.671718295901f,
					78.0833333333333f));
			fixedPoints.add(new Point3f(143.977242890511f, -406.671718295901f,
					78.0833333333333f));
			fixedPoints.add(new Point3f(143.977242890511f, -411.671718295901f,
					78.0833333333333f));
			fixedPoints.add(new Point3f(143.977242890511f, -416.671718295901f,
					78.0833333333333f));
			fixedPoints.add(new Point3f(143.977242890511f, -421.671718295901f,
					78.0833333333333f));
			fixedPoints.add(new Point3f(143.977242890511f, -426.671718295901f,
					78.0833333333333f));
			fixedPoints.add(new Point3f(143.977242890511f, -431.671718295901f,
					78.0833333333333f));
			fixedPoints.add(new Point3f(143.977242890511f, -436.671718295901f,
					78.0833333333333f));
			fixedPoints.add(new Point3f(143.977242890511f, -441.671718295901f,
					78.0833333333333f));
			fixedPoints.add(new Point3f(143.977242890511f, -446.671718295901f,
					78.0833333333333f));
			fixedPoints.add(new Point3f(143.977242890511f, -451.671718295901f,
					78.0833333333333f));
			fixedPoints.add(new Point3f(140.300585478055f, -452.995060883445f,
					78.0833333333333f));
			fixedPoints.add(new Point3f(135.300585478055f, -452.995060883445f,
					78.0833333333333f));
			fixedPoints.add(new Point3f(130.300585478055f, -452.995060883445f,
					78.0833333333333f));
			fixedPoints.add(new Point3f(125.300585478055f, -452.995060883445f,
					78.0833333333333f));
			fixedPoints.add(new Point3f(120.300585478055f, -452.995060883445f,
					78.0833333333333f));
			fixedPoints.add(new Point3f(115.300585478055f, -452.995060883445f,
					78.0833333333333f));
			fixedPoints.add(new Point3f(110.300585478055f, -452.995060883445f,
					78.0833333333333f));
			fixedPoints.add(new Point3f(105.300585478055f, -452.995060883445f,
					78.0833333333333f));
			fixedPoints.add(new Point3f(100.300585478055f, -452.995060883445f,
					78.0833333333333f));
			fixedPoints.add(new Point3f(95.3005854780553f, -452.995060883445f,
					78.0833333333333f));
			fixedPoints.add(new Point3f(90.3005854780552f, -452.995060883445f,
					78.0833333333333f));
			fixedPoints.add(new Point3f(85.3005854780553f, -452.995060883445f,
					78.0833333333333f));
			fixedPoints.add(new Point3f(167.837222739878f, -419.836898503727f,
					114.333333333333f));
			fixedPoints.add(new Point3f(167.233858902559f, -420.69018382551f,
					114.333333333333f));
			fixedPoints.add(new Point3f(166.630495065239f, -421.543469147293f,
					114.333333333333f));
			fixedPoints.add(new Point3f(166.027131227919f, -422.396754469076f,
					114.333333333333f));
			fixedPoints.add(new Point3f(164.21703971596f, -419.836898503727f,
					114.333333333333f));
			fixedPoints.add(new Point3f(165.4237673906f, -419.836898503727f,
					114.333333333333f));
			fixedPoints.add(new Point3f(166.630495065239f, -419.836898503727f,
					114.333333333333f));
			fixedPoints.add(new Point3f(167.837222739878f, -419.836898503727f,
					114.333333333333f));
			fixedPoints.add(new Point3f(166.027131227919f, -422.396754469076f,
					114.333333333333f));
			fixedPoints.add(new Point3f(165.4237673906f, -421.543469147293f,
					114.333333333333f));
			fixedPoints.add(new Point3f(164.82040355328f, -420.69018382551f,
					114.333333333333f));
			fixedPoints.add(new Point3f(164.21703971596f, -419.836898503727f,
					114.333333333333f));
			fixedPoints.add(new Point3f(65.2861132211827f, -539.836898503727f,
					114.333333333333f));
			fixedPoints.add(new Point3f(64.6827493838631f, -540.69018382551f,
					114.333333333333f));
			fixedPoints.add(new Point3f(64.0793855465434f, -541.543469147293f,
					114.333333333333f));
			fixedPoints.add(new Point3f(63.4760217092237f, -542.396754469076f,
					114.333333333333f));
			fixedPoints.add(new Point3f(61.6659301972647f, -539.836898503727f,
					114.333333333333f));
			fixedPoints.add(new Point3f(62.872657871904f, -539.836898503727f,
					114.333333333333f));
			fixedPoints.add(new Point3f(64.0793855465434f, -539.836898503727f,
					114.333333333333f));
			fixedPoints.add(new Point3f(65.2861132211827f, -539.836898503727f,
					114.333333333333f));
			fixedPoints.add(new Point3f(63.4760217092237f, -542.396754469076f,
					114.333333333333f));
			fixedPoints.add(new Point3f(62.872657871904f, -541.543469147293f,
					114.333333333333f));
			fixedPoints.add(new Point3f(62.2692940345843f, -540.69018382551f,
					114.333333333333f));
			fixedPoints.add(new Point3f(61.6659301972646f, -539.836898503727f,
					114.333333333333f));
			fixedPoints.add(new Point3f(167.837222739878f, -599.836898503727f,
					114.333333333333f));
			fixedPoints.add(new Point3f(167.233858902559f, -600.69018382551f,
					114.333333333333f));
			fixedPoints.add(new Point3f(166.630495065239f, -601.543469147293f,
					114.333333333333f));
			fixedPoints.add(new Point3f(166.027131227919f, -602.396754469076f,
					114.333333333333f));
			fixedPoints.add(new Point3f(164.21703971596f, -599.836898503727f,
					114.333333333333f));
			fixedPoints.add(new Point3f(165.4237673906f, -599.836898503727f,
					114.333333333333f));
			fixedPoints.add(new Point3f(166.630495065239f, -599.836898503727f,
					114.333333333333f));
			fixedPoints.add(new Point3f(167.837222739878f, -599.836898503727f,
					114.333333333333f));
			fixedPoints.add(new Point3f(166.027131227919f, -602.396754469076f,
					114.333333333333f));
			fixedPoints.add(new Point3f(165.4237673906f, -601.543469147293f,
					114.333333333333f));
			fixedPoints.add(new Point3f(164.82040355328f, -600.69018382551f,
					114.333333333333f));
			fixedPoints.add(new Point3f(164.21703971596f, -599.836898503727f,
					114.333333333333f));
			fixedPoints.add(new Point3f(65.2861132211826f, -659.836898503727f,
					114.333333333333f));
			fixedPoints.add(new Point3f(64.682749383863f, -660.69018382551f,
					114.333333333333f));
			fixedPoints.add(new Point3f(64.0793855465433f, -661.543469147293f,
					114.333333333333f));
			fixedPoints.add(new Point3f(63.4760217092237f, -662.396754469076f,
					114.333333333333f));
			fixedPoints.add(new Point3f(61.6659301972647f, -659.836898503727f,
					114.333333333333f));
			fixedPoints.add(new Point3f(62.872657871904f, -659.836898503727f,
					114.333333333333f));
			fixedPoints.add(new Point3f(64.0793855465433f, -659.836898503727f,
					114.333333333333f));
			fixedPoints.add(new Point3f(65.2861132211826f, -659.836898503727f,
					114.333333333333f));
			fixedPoints.add(new Point3f(63.4760217092237f, -662.396754469076f,
					114.333333333333f));
			fixedPoints.add(new Point3f(62.872657871904f, -661.543469147293f,
					114.333333333333f));
			fixedPoints.add(new Point3f(62.2692940345844f, -660.69018382551f,
					114.333333333333f));
			fixedPoints.add(new Point3f(61.6659301972647f, -659.836898503727f,
					114.333333333333f));
			fixedPoints.add(new Point3f(174.908290551744f, -414.836898503727f,
					109.333333333333f));
			fixedPoints.add(new Point3f(171.947904110469f, -419.023517158843f,
					109.333333333333f));
			fixedPoints.add(new Point3f(168.987517669194f, -423.210135813959f,
					109.333333333333f));
			fixedPoints.add(new Point3f(166.027131227919f, -427.396754469076f,
					109.333333333333f));
			fixedPoints.add(new Point3f(157.145971904095f, -414.836898503727f,
					109.333333333333f));
			fixedPoints.add(new Point3f(163.066744786644f, -414.836898503727f,
					109.333333333333f));
			fixedPoints.add(new Point3f(168.987517669194f, -414.836898503727f,
					109.333333333333f));
			fixedPoints.add(new Point3f(174.908290551744f, -414.836898503727f,
					109.333333333333f));
			fixedPoints.add(new Point3f(166.027131227919f, -427.396754469076f,
					109.333333333333f));
			fixedPoints.add(new Point3f(163.066744786644f, -423.210135813959f,
					109.333333333333f));
			fixedPoints.add(new Point3f(160.10635834537f, -419.023517158843f,
					109.333333333333f));
			fixedPoints.add(new Point3f(157.145971904095f, -414.836898503727f,
					109.333333333333f));
			fixedPoints.add(new Point3f(72.3571810330481f, -534.836898503727f,
					109.333333333333f));
			fixedPoints.add(new Point3f(69.3967945917733f, -539.023517158843f,
					109.333333333333f));
			fixedPoints.add(new Point3f(66.4364081504985f, -543.21013581396f,
					109.333333333333f));
			fixedPoints.add(new Point3f(63.4760217092237f, -547.396754469076f,
					109.333333333333f));
			fixedPoints.add(new Point3f(54.594862385399f, -534.836898503727f,
					109.333333333333f));
			fixedPoints.add(new Point3f(60.5156352679487f, -534.836898503727f,
					109.333333333333f));
			fixedPoints.add(new Point3f(66.4364081504984f, -534.836898503727f,
					109.333333333333f));
			fixedPoints.add(new Point3f(72.3571810330481f, -534.836898503727f,
					109.333333333333f));
			fixedPoints.add(new Point3f(63.4760217092237f, -547.396754469076f,
					109.333333333333f));
			fixedPoints.add(new Point3f(60.5156352679488f, -543.210135813959f,
					109.333333333333f));
			fixedPoints.add(new Point3f(57.5552488266739f, -539.023517158843f,
					109.333333333333f));
			fixedPoints.add(new Point3f(54.594862385399f, -534.836898503727f,
					109.333333333333f));
			fixedPoints.add(new Point3f(174.908290551744f, -594.836898503727f,
					109.333333333333f));
			fixedPoints.add(new Point3f(171.947904110469f, -599.023517158843f,
					109.333333333333f));
			fixedPoints.add(new Point3f(168.987517669194f, -603.21013581396f,
					109.333333333333f));
			fixedPoints.add(new Point3f(166.027131227919f, -607.396754469076f,
					109.333333333333f));
			fixedPoints.add(new Point3f(157.145971904095f, -594.836898503727f,
					109.333333333333f));
			fixedPoints.add(new Point3f(163.066744786644f, -594.836898503727f,
					109.333333333333f));
			fixedPoints.add(new Point3f(168.987517669194f, -594.836898503727f,
					109.333333333333f));
			fixedPoints.add(new Point3f(174.908290551744f, -594.836898503727f,
					109.333333333333f));
			fixedPoints.add(new Point3f(166.027131227919f, -607.396754469076f,
					109.333333333333f));
			fixedPoints.add(new Point3f(163.066744786644f, -603.21013581396f,
					109.333333333333f));
			fixedPoints.add(new Point3f(160.10635834537f, -599.023517158843f,
					109.333333333333f));
			fixedPoints.add(new Point3f(157.145971904095f, -594.836898503727f,
					109.333333333333f));
			fixedPoints.add(new Point3f(72.3571810330481f, -654.836898503727f,
					109.333333333333f));
			fixedPoints.add(new Point3f(69.3967945917733f, -659.023517158843f,
					109.333333333333f));
			fixedPoints.add(new Point3f(66.4364081504985f, -663.210135813959f,
					109.333333333333f));
			fixedPoints.add(new Point3f(63.4760217092237f, -667.396754469076f,
					109.333333333333f));
			fixedPoints.add(new Point3f(54.594862385399f, -654.836898503727f,
					109.333333333333f));
			fixedPoints.add(new Point3f(60.5156352679487f, -654.836898503727f,
					109.333333333333f));
			fixedPoints.add(new Point3f(66.4364081504984f, -654.836898503727f,
					109.333333333333f));
			fixedPoints.add(new Point3f(72.3571810330481f, -654.836898503727f,
					109.333333333333f));
			fixedPoints.add(new Point3f(63.4760217092237f, -667.396754469076f,
					109.333333333333f));
			fixedPoints.add(new Point3f(60.5156352679488f, -663.21013581396f,
					109.333333333333f));
			fixedPoints.add(new Point3f(57.5552488266739f, -659.023517158843f,
					109.333333333333f));
			fixedPoints.add(new Point3f(54.594862385399f, -654.836898503727f,
					109.333333333333f));
			fixedPoints.add(new Point3f(181.979358363609f, -409.836898503727f,
					104.333333333333f));
			fixedPoints.add(new Point3f(176.661949318379f, -417.356850492176f,
					104.333333333333f));
			fixedPoints.add(new Point3f(171.344540273149f, -424.876802480626f,
					104.333333333333f));
			fixedPoints.add(new Point3f(166.027131227919f, -432.396754469076f,
					104.333333333333f));
			fixedPoints.add(new Point3f(150.074904092229f, -409.836898503727f,
					104.333333333333f));
			fixedPoints.add(new Point3f(160.709722182689f, -409.836898503727f,
					104.333333333333f));
			fixedPoints.add(new Point3f(171.344540273149f, -409.836898503727f,
					104.333333333333f));
			fixedPoints.add(new Point3f(181.979358363609f, -409.836898503727f,
					104.333333333333f));
			fixedPoints.add(new Point3f(166.027131227919f, -432.396754469076f,
					104.333333333333f));
			fixedPoints.add(new Point3f(160.709722182689f, -424.876802480626f,
					104.333333333333f));
			fixedPoints.add(new Point3f(155.392313137459f, -417.356850492176f,
					104.333333333333f));
			fixedPoints.add(new Point3f(150.074904092229f, -409.836898503727f,
					104.333333333333f));
			fixedPoints.add(new Point3f(79.4282488449136f, -529.836898503727f,
					104.333333333333f));
			fixedPoints.add(new Point3f(74.1108397996836f, -537.356850492177f,
					104.333333333333f));
			fixedPoints.add(new Point3f(68.7934307544537f, -544.876802480626f,
					104.333333333333f));
			fixedPoints.add(new Point3f(63.4760217092237f, -552.396754469076f,
					104.333333333333f));
			fixedPoints.add(new Point3f(47.5237945735333f, -529.836898503727f,
					104.333333333333f));
			fixedPoints.add(new Point3f(58.1586126639933f, -529.836898503727f,
					104.333333333333f));
			fixedPoints.add(new Point3f(68.7934307544535f, -529.836898503727f,
					104.333333333333f));
			fixedPoints.add(new Point3f(79.4282488449136f, -529.836898503727f,
					104.333333333333f));
			fixedPoints.add(new Point3f(63.4760217092237f, -552.396754469076f,
					104.333333333333f));
			fixedPoints.add(new Point3f(58.1586126639936f, -544.876802480626f,
					104.333333333333f));
			fixedPoints.add(new Point3f(52.8412036187634f, -537.356850492176f,
					104.333333333333f));
			fixedPoints.add(new Point3f(47.5237945735333f, -529.836898503727f,
					104.333333333333f));
			fixedPoints.add(new Point3f(181.979358363609f, -589.836898503727f,
					104.333333333333f));
			fixedPoints.add(new Point3f(176.661949318379f, -597.356850492176f,
					104.333333333333f));
			fixedPoints.add(new Point3f(171.344540273149f, -604.876802480626f,
					104.333333333333f));
			fixedPoints.add(new Point3f(166.027131227919f, -612.396754469076f,
					104.333333333333f));
			fixedPoints.add(new Point3f(150.074904092229f, -589.836898503727f,
					104.333333333333f));
			fixedPoints.add(new Point3f(160.709722182689f, -589.836898503727f,
					104.333333333333f));
			fixedPoints.add(new Point3f(171.344540273149f, -589.836898503727f,
					104.333333333333f));
			fixedPoints.add(new Point3f(181.979358363609f, -589.836898503727f,
					104.333333333333f));
			fixedPoints.add(new Point3f(166.027131227919f, -612.396754469076f,
					104.333333333333f));
			fixedPoints.add(new Point3f(160.709722182689f, -604.876802480626f,
					104.333333333333f));
			fixedPoints.add(new Point3f(155.392313137459f, -597.356850492176f,
					104.333333333333f));
			fixedPoints.add(new Point3f(150.074904092229f, -589.836898503727f,
					104.333333333333f));
			fixedPoints.add(new Point3f(79.4282488449135f, -649.836898503727f,
					104.333333333333f));
			fixedPoints.add(new Point3f(74.1108397996835f, -657.356850492177f,
					104.333333333333f));
			fixedPoints.add(new Point3f(68.7934307544536f, -664.876802480626f,
					104.333333333333f));
			fixedPoints.add(new Point3f(63.4760217092237f, -672.396754469076f,
					104.333333333333f));
			fixedPoints.add(new Point3f(47.5237945735333f, -649.836898503727f,
					104.333333333333f));
			fixedPoints.add(new Point3f(58.1586126639934f, -649.836898503727f,
					104.333333333333f));
			fixedPoints.add(new Point3f(68.7934307544534f, -649.836898503727f,
					104.333333333333f));
			fixedPoints.add(new Point3f(79.4282488449135f, -649.836898503727f,
					104.333333333333f));
			fixedPoints.add(new Point3f(63.4760217092237f, -672.396754469076f,
					104.333333333333f));
			fixedPoints.add(new Point3f(58.1586126639936f, -664.876802480626f,
					104.333333333333f));
			fixedPoints.add(new Point3f(52.8412036187634f, -657.356850492176f,
					104.333333333333f));
			fixedPoints.add(new Point3f(47.5237945735333f, -649.836898503727f,
					104.333333333333f));
			fixedPoints.add(new Point3f(186.439545751112f, -408.529241009594f,
					99.3333333333332f));
			fixedPoints.add(new Point3f(179.635407576715f, -418.151745496088f,
					99.3333333333332f));
			fixedPoints.add(new Point3f(172.831269402317f, -427.774249982582f,
					99.3333333333332f));
			fixedPoints.add(new Point3f(166.027131227919f, -437.396754469076f,
					99.3333333333332f));
			fixedPoints.add(new Point3f(148.225597129089f, -404.836898503727f,
					99.3333333333332f));
			fixedPoints.add(new Point3f(160.093286528309f, -404.836898503727f,
					99.3333333333332f));
			fixedPoints.add(new Point3f(171.96097592753f, -404.836898503727f,
					99.3333333333332f));
			fixedPoints.add(new Point3f(183.82866532675f, -404.836898503727f,
					99.3333333333332f));
			fixedPoints.add(new Point3f(166.027131227919f, -437.396754469076f,
					99.3333333333332f));
			fixedPoints.add(new Point3f(159.222993053522f, -427.774249982582f,
					99.3333333333332f));
			fixedPoints.add(new Point3f(152.418854879124f, -418.151745496088f,
					99.3333333333332f));
			fixedPoints.add(new Point3f(145.614716704726f, -408.529241009595f,
					99.3333333333332f));
			fixedPoints.add(new Point3f(83.8884362324167f, -528.529241009594f,
					99.3333333333332f));
			fixedPoints.add(new Point3f(77.084298058019f, -538.151745496088f,
					99.3333333333332f));
			fixedPoints.add(new Point3f(70.2801598836214f, -547.774249982582f,
					99.3333333333332f));
			fixedPoints.add(new Point3f(63.4760217092237f, -557.396754469076f,
					99.3333333333332f));
			fixedPoints.add(new Point3f(45.6744876103931f, -524.836898503727f,
					99.3333333333332f));
			fixedPoints.add(new Point3f(57.5421770096135f, -524.836898503727f,
					99.3333333333332f));
			fixedPoints.add(new Point3f(69.4098664088339f, -524.836898503727f,
					99.3333333333332f));
			fixedPoints.add(new Point3f(81.2775558080542f, -524.836898503727f,
					99.3333333333332f));
			fixedPoints.add(new Point3f(63.4760217092237f, -557.396754469076f,
					99.3333333333332f));
			fixedPoints.add(new Point3f(56.6718835348259f, -547.774249982582f,
					99.3333333333332f));
			fixedPoints.add(new Point3f(49.8677453604282f, -538.151745496088f,
					99.3333333333332f));
			fixedPoints.add(new Point3f(43.0636071860304f, -528.529241009595f,
					99.3333333333332f));
			fixedPoints.add(new Point3f(186.439545751112f, -588.529241009594f,
					99.3333333333332f));
			fixedPoints.add(new Point3f(179.635407576715f, -598.151745496088f,
					99.3333333333332f));
			fixedPoints.add(new Point3f(172.831269402317f, -607.774249982582f,
					99.3333333333332f));
			fixedPoints.add(new Point3f(166.027131227919f, -617.396754469076f,
					99.3333333333332f));
			fixedPoints.add(new Point3f(148.225597129089f, -584.836898503727f,
					99.3333333333332f));
			fixedPoints.add(new Point3f(160.093286528309f, -584.836898503727f,
					99.3333333333332f));
			fixedPoints.add(new Point3f(171.96097592753f, -584.836898503727f,
					99.3333333333332f));
			fixedPoints.add(new Point3f(183.82866532675f, -584.836898503727f,
					99.3333333333332f));
			fixedPoints.add(new Point3f(166.027131227919f, -617.396754469076f,
					99.3333333333332f));
			fixedPoints.add(new Point3f(159.222993053522f, -607.774249982582f,
					99.3333333333332f));
			fixedPoints.add(new Point3f(152.418854879124f, -598.151745496088f,
					99.3333333333332f));
			fixedPoints.add(new Point3f(145.614716704726f, -588.529241009595f,
					99.3333333333332f));
			fixedPoints.add(new Point3f(83.8884362324166f, -648.529241009594f,
					99.3333333333332f));
			fixedPoints.add(new Point3f(77.084298058019f, -658.151745496088f,
					99.3333333333332f));
			fixedPoints.add(new Point3f(70.2801598836213f, -667.774249982582f,
					99.3333333333332f));
			fixedPoints.add(new Point3f(63.4760217092237f, -677.396754469075f,
					99.3333333333332f));
			fixedPoints.add(new Point3f(45.674487610393f, -644.836898503727f,
					99.3333333333332f));
			fixedPoints.add(new Point3f(57.5421770096135f, -644.836898503727f,
					99.3333333333332f));
			fixedPoints.add(new Point3f(69.4098664088339f, -644.836898503727f,
					99.3333333333332f));
			fixedPoints.add(new Point3f(81.2775558080543f, -644.836898503727f,
					99.3333333333332f));
			fixedPoints.add(new Point3f(63.4760217092237f, -677.396754469075f,
					99.3333333333332f));
			fixedPoints.add(new Point3f(56.6718835348259f, -667.774249982582f,
					99.3333333333332f));
			fixedPoints.add(new Point3f(49.8677453604282f, -658.151745496088f,
					99.3333333333332f));
			fixedPoints.add(new Point3f(43.0636071860304f, -648.529241009595f,
					99.3333333333332f));
			fixedPoints.add(new Point3f(186.439545751112f, -413.529241009594f,
					94.3333333333332f));
			fixedPoints.add(new Point3f(180.044357343361f, -422.573403189767f,
					94.3333333333332f));
			fixedPoints.add(new Point3f(173.64916893561f, -431.61756536994f,
					94.3333333333332f));
			fixedPoints.add(new Point3f(167.253980527859f, -440.661727550113f,
					94.3333333333332f));
			fixedPoints.add(new Point3f(155.296664940954f, -399.836898503727f,
					94.3333333333332f));
			fixedPoints.add(new Point3f(162.450309132264f, -399.836898503727f,
					94.3333333333332f));
			fixedPoints.add(new Point3f(169.603953323574f, -399.836898503727f,
					94.3333333333332f));
			fixedPoints.add(new Point3f(176.757597514884f, -399.836898503727f,
					94.3333333333332f));
			fixedPoints.add(new Point3f(164.80028192798f, -440.661727550113f,
					94.3333333333332f));
			fixedPoints.add(new Point3f(158.405093520229f, -431.617565369941f,
					94.3333333333332f));
			fixedPoints.add(new Point3f(152.009905112477f, -422.573403189768f,
					94.3333333333332f));
			fixedPoints.add(new Point3f(145.614716704726f, -413.529241009595f,
					94.3333333333332f));
			fixedPoints.add(new Point3f(83.8884362324167f, -533.529241009594f,
					94.3333333333332f));
			fixedPoints.add(new Point3f(77.4932478246654f, -542.573403189767f,
					94.3333333333332f));
			fixedPoints.add(new Point3f(71.0980594169142f, -551.61756536994f,
					94.3333333333332f));
			fixedPoints.add(new Point3f(64.7028710091629f, -560.661727550113f,
					94.3333333333332f));
			fixedPoints.add(new Point3f(52.7455554222586f, -519.836898503727f,
					94.3333333333332f));
			fixedPoints.add(new Point3f(59.8991996135686f, -519.836898503727f,
					94.3333333333332f));
			fixedPoints.add(new Point3f(67.0528438048785f, -519.836898503727f,
					94.3333333333332f));
			fixedPoints.add(new Point3f(74.2064879961885f, -519.836898503727f,
					94.3333333333332f));
			fixedPoints.add(new Point3f(62.2491724092844f, -560.661727550113f,
					94.3333333333332f));
			fixedPoints.add(new Point3f(55.8539840015331f, -551.617565369941f,
					94.3333333333332f));
			fixedPoints.add(new Point3f(49.4587955937817f, -542.573403189768f,
					94.3333333333332f));
			fixedPoints.add(new Point3f(43.0636071860304f, -533.529241009595f,
					94.3333333333332f));
			fixedPoints.add(new Point3f(186.439545751112f, -593.529241009594f,
					94.3333333333332f));
			fixedPoints.add(new Point3f(180.044357343361f, -602.573403189767f,
					94.3333333333332f));
			fixedPoints.add(new Point3f(173.64916893561f, -611.61756536994f,
					94.3333333333332f));
			fixedPoints.add(new Point3f(167.253980527859f, -620.661727550113f,
					94.3333333333332f));
			fixedPoints.add(new Point3f(155.296664940954f, -579.836898503727f,
					94.3333333333332f));
			fixedPoints.add(new Point3f(162.450309132264f, -579.836898503727f,
					94.3333333333332f));
			fixedPoints.add(new Point3f(169.603953323574f, -579.836898503727f,
					94.3333333333332f));
			fixedPoints.add(new Point3f(176.757597514884f, -579.836898503727f,
					94.3333333333332f));
			fixedPoints.add(new Point3f(164.80028192798f, -620.661727550113f,
					94.3333333333332f));
			fixedPoints.add(new Point3f(158.405093520229f, -611.617565369941f,
					94.3333333333332f));
			fixedPoints.add(new Point3f(152.009905112477f, -602.573403189768f,
					94.3333333333332f));
			fixedPoints.add(new Point3f(145.614716704726f, -593.529241009595f,
					94.3333333333332f));
			fixedPoints.add(new Point3f(83.8884362324166f, -653.529241009594f,
					94.3333333333332f));
			fixedPoints.add(new Point3f(77.4932478246654f, -662.573403189767f,
					94.3333333333332f));
			fixedPoints.add(new Point3f(71.0980594169141f, -671.61756536994f,
					94.3333333333332f));
			fixedPoints.add(new Point3f(64.7028710091628f, -680.661727550113f,
					94.3333333333332f));
			fixedPoints.add(new Point3f(52.7455554222585f, -639.836898503727f,
					94.3333333333332f));
			fixedPoints.add(new Point3f(59.8991996135685f, -639.836898503727f,
					94.3333333333332f));
			fixedPoints.add(new Point3f(67.0528438048785f, -639.836898503727f,
					94.3333333333332f));
			fixedPoints.add(new Point3f(74.2064879961886f, -639.836898503727f,
					94.3333333333332f));
			fixedPoints.add(new Point3f(62.2491724092845f, -680.661727550113f,
					94.3333333333332f));
			fixedPoints.add(new Point3f(55.8539840015331f, -671.617565369941f,
					94.3333333333332f));
			fixedPoints.add(new Point3f(49.4587955937818f, -662.573403189768f,
					94.3333333333332f));
			fixedPoints.add(new Point3f(43.0636071860304f, -653.529241009595f,
					94.3333333333332f));
			fixedPoints.add(new Point3f(186.439545751112f, -418.529241009594f,
					89.3333333333332f));
			fixedPoints.add(new Point3f(182.401379947316f, -424.240069856434f,
					89.3333333333332f));
			fixedPoints.add(new Point3f(178.36321414352f, -429.950898703274f,
					89.3333333333332f));
			fixedPoints.add(new Point3f(174.325048339724f, -435.661727550113f,
					89.3333333333332f));
			fixedPoints.add(new Point3f(162.36773275282f, -394.836898503727f,
					89.3333333333332f));
			fixedPoints.add(new Point3f(164.807331736219f, -394.836898503727f,
					89.3333333333332f));
			fixedPoints.add(new Point3f(167.246930719619f, -394.836898503727f,
					89.3333333333332f));
			fixedPoints.add(new Point3f(169.686529703018f, -394.836898503727f,
					89.3333333333332f));
			fixedPoints.add(new Point3f(157.729214116114f, -435.661727550113f,
					89.3333333333332f));
			fixedPoints.add(new Point3f(153.691048312318f, -429.950898703274f,
					89.3333333333332f));
			fixedPoints.add(new Point3f(149.652882508522f, -424.240069856434f,
					89.3333333333332f));
			fixedPoints.add(new Point3f(145.614716704726f, -418.529241009595f,
					89.3333333333332f));
			fixedPoints.add(new Point3f(83.8884362324167f, -538.529241009594f,
					89.3333333333332f));
			fixedPoints.add(new Point3f(79.8502704286206f, -544.240069856434f,
					89.3333333333332f));
			fixedPoints.add(new Point3f(75.8121046248245f, -549.950898703274f,
					89.3333333333332f));
			fixedPoints.add(new Point3f(71.7739388210284f, -555.661727550113f,
					89.3333333333332f));
			fixedPoints.add(new Point3f(59.816623234124f, -514.836898503727f,
					89.3333333333332f));
			fixedPoints.add(new Point3f(62.2562222175236f, -514.836898503727f,
					89.3333333333332f));
			fixedPoints.add(new Point3f(64.6958212009232f, -514.836898503727f,
					89.3333333333332f));
			fixedPoints.add(new Point3f(67.1354201843228f, -514.836898503727f,
					89.3333333333332f));
			fixedPoints.add(new Point3f(55.1781045974187f, -555.661727550113f,
					89.3333333333332f));
			fixedPoints.add(new Point3f(51.1399387936226f, -549.950898703274f,
					89.3333333333332f));
			fixedPoints.add(new Point3f(47.1017729898265f, -544.240069856434f,
					89.3333333333332f));
			fixedPoints.add(new Point3f(43.0636071860304f, -538.529241009595f,
					89.3333333333332f));
			fixedPoints.add(new Point3f(186.439545751112f, -598.529241009594f,
					89.3333333333332f));
			fixedPoints.add(new Point3f(182.401379947316f, -604.240069856434f,
					89.3333333333332f));
			fixedPoints.add(new Point3f(178.36321414352f, -609.950898703274f,
					89.3333333333332f));
			fixedPoints.add(new Point3f(174.325048339724f, -615.661727550113f,
					89.3333333333332f));
			fixedPoints.add(new Point3f(162.36773275282f, -574.836898503727f,
					89.3333333333332f));
			fixedPoints.add(new Point3f(164.807331736219f, -574.836898503727f,
					89.3333333333332f));
			fixedPoints.add(new Point3f(167.246930719619f, -574.836898503727f,
					89.3333333333332f));
			fixedPoints.add(new Point3f(169.686529703018f, -574.836898503727f,
					89.3333333333332f));
			fixedPoints.add(new Point3f(157.729214116114f, -615.661727550113f,
					89.3333333333332f));
			fixedPoints.add(new Point3f(153.691048312318f, -609.950898703274f,
					89.3333333333332f));
			fixedPoints.add(new Point3f(149.652882508522f, -604.240069856434f,
					89.3333333333332f));
			fixedPoints.add(new Point3f(145.614716704726f, -598.529241009595f,
					89.3333333333332f));
			fixedPoints.add(new Point3f(83.8884362324166f, -658.529241009594f,
					89.3333333333332f));
			fixedPoints.add(new Point3f(79.8502704286205f, -664.240069856434f,
					89.3333333333332f));
			fixedPoints.add(new Point3f(75.8121046248244f, -669.950898703274f,
					89.3333333333332f));
			fixedPoints.add(new Point3f(71.7739388210283f, -675.661727550113f,
					89.3333333333332f));
			fixedPoints.add(new Point3f(59.8166232341239f, -634.836898503727f,
					89.3333333333332f));
			fixedPoints.add(new Point3f(62.2562222175236f, -634.836898503726f,
					89.3333333333332f));
			fixedPoints.add(new Point3f(64.6958212009232f, -634.836898503727f,
					89.3333333333332f));
			fixedPoints.add(new Point3f(67.1354201843229f, -634.836898503727f,
					89.3333333333332f));
			fixedPoints.add(new Point3f(55.1781045974188f, -675.661727550113f,
					89.3333333333332f));
			fixedPoints.add(new Point3f(51.1399387936227f, -669.950898703274f,
					89.3333333333332f));
			fixedPoints.add(new Point3f(47.1017729898265f, -664.240069856434f,
					89.3333333333332f));
			fixedPoints.add(new Point3f(43.0636071860304f, -658.529241009595f,
					89.3333333333332f));
			fixedPoints.add(new Point3f(186.439545751112f, -423.529241009594f,
					84.3333333333332f));
			fixedPoints.add(new Point3f(184.758402551271f, -425.9067365231f,
					84.3333333333332f));
			fixedPoints.add(new Point3f(183.07725935143f, -428.284232036607f,
					84.3333333333332f));
			fixedPoints.add(new Point3f(181.396116151589f, -430.661727550113f,
					84.3333333333332f));
			fixedPoints.add(new Point3f(150.658146304249f, -430.661727550113f,
					84.3333333333332f));
			fixedPoints.add(new Point3f(148.977003104408f, -428.284232036607f,
					84.3333333333332f));
			fixedPoints.add(new Point3f(147.295859904567f, -425.906736523101f,
					84.3333333333332f));
			fixedPoints.add(new Point3f(145.614716704726f, -423.529241009595f,
					84.3333333333332f));
			fixedPoints.add(new Point3f(83.8884362324167f, -543.529241009594f,
					84.3333333333332f));
			fixedPoints.add(new Point3f(82.2072930325757f, -545.9067365231f,
					84.3333333333332f));
			fixedPoints.add(new Point3f(80.5261498327348f, -548.284232036607f,
					84.3333333333332f));
			fixedPoints.add(new Point3f(78.8450066328938f, -550.661727550113f,
					84.3333333333332f));
			fixedPoints.add(new Point3f(48.107036785553f, -550.661727550113f,
					84.3333333333332f));
			fixedPoints.add(new Point3f(46.4258935857122f, -548.284232036607f,
					84.3333333333332f));
			fixedPoints.add(new Point3f(44.7447503858713f, -545.906736523101f,
					84.3333333333332f));
			fixedPoints.add(new Point3f(43.0636071860304f, -543.529241009595f,
					84.3333333333332f));
			fixedPoints.add(new Point3f(186.439545751112f, -603.529241009594f,
					84.3333333333332f));
			fixedPoints.add(new Point3f(184.758402551271f, -605.9067365231f,
					84.3333333333332f));
			fixedPoints.add(new Point3f(183.07725935143f, -608.284232036607f,
					84.3333333333332f));
			fixedPoints.add(new Point3f(181.396116151589f, -610.661727550113f,
					84.3333333333332f));
			fixedPoints.add(new Point3f(150.658146304249f, -610.661727550113f,
					84.3333333333332f));
			fixedPoints.add(new Point3f(148.977003104408f, -608.284232036607f,
					84.3333333333332f));
			fixedPoints.add(new Point3f(147.295859904567f, -605.906736523101f,
					84.3333333333332f));
			fixedPoints.add(new Point3f(145.614716704726f, -603.529241009595f,
					84.3333333333332f));
			fixedPoints.add(new Point3f(83.8884362324166f, -663.529241009594f,
					84.3333333333332f));
			fixedPoints.add(new Point3f(82.2072930325757f, -665.9067365231f,
					84.3333333333332f));
			fixedPoints.add(new Point3f(80.5261498327347f, -668.284232036607f,
					84.3333333333332f));
			fixedPoints.add(new Point3f(78.8450066328937f, -670.661727550113f,
					84.3333333333332f));
			fixedPoints.add(new Point3f(48.1070367855531f, -670.661727550113f,
					84.3333333333332f));
			fixedPoints.add(new Point3f(46.4258935857122f, -668.284232036607f,
					84.3333333333332f));
			fixedPoints.add(new Point3f(44.7447503858713f, -665.906736523101f,
					84.3333333333332f));
			fixedPoints.add(new Point3f(43.0636071860304f, -663.529241009594f,
					84.3333333333332f));
			fixedPoints.add(new Point3f(97.4183584752479f, -371.995065050111f,
					78.0833333333333f));
			fixedPoints.add(new Point3f(143.977242890511f, -418.553949465374f,
					78.0833333333333f));
			fixedPoints.add(new Point3f(85.3005854780553f, -452.995060883445f,
					78.0833333333333f));

			fixPoints(fixedPoints);

		}

		// option 6
		if (option == 6) {
			fixEdges();
			ArrayList<Point3f> fixedPoints = new ArrayList<Point3f>();
			fixedPoints.add(new Point3f(85.3005854780553f, -452.995060883445f,
					78.0833333333333f));
			fixedPoints.add(new Point3f(143.977242890511f, -418.553949465374f,
					78.0833333333333f));
			fixedPoints.add(new Point3f(97.4183584752479f, -371.995065050111f,
					78.0833333333333f));
			fixedPoints.add(new Point3f(85.3005854780553f, -452.995060883445f,
					78.0833333333333f));
			fixedPoints.add(new Point3f(90.3005854780552f, -452.995060883445f,
					78.0833333333333f));
			fixedPoints.add(new Point3f(95.3005854780553f, -452.995060883445f,
					78.0833333333333f));
			fixedPoints.add(new Point3f(100.300585478055f, -452.995060883445f,
					78.0833333333333f));
			fixedPoints.add(new Point3f(105.300585478055f, -452.995060883445f,
					78.0833333333333f));
			fixedPoints.add(new Point3f(110.300585478055f, -452.995060883445f,
					78.0833333333333f));
			fixedPoints.add(new Point3f(115.300585478055f, -452.995060883445f,
					78.0833333333333f));
			fixedPoints.add(new Point3f(120.300585478055f, -452.995060883445f,
					78.0833333333333f));
			fixedPoints.add(new Point3f(125.300585478055f, -452.995060883445f,
					78.0833333333333f));
			fixedPoints.add(new Point3f(130.300585478055f, -452.995060883445f,
					78.0833333333333f));
			fixedPoints.add(new Point3f(135.300585478055f, -452.995060883445f,
					78.0833333333333f));
			fixedPoints.add(new Point3f(140.300585478055f, -452.995060883445f,
					78.0833333333333f));
			fixedPoints.add(new Point3f(143.977242890511f, -451.671718295901f,
					78.0833333333333f));
			fixedPoints.add(new Point3f(143.977242890511f, -446.671718295901f,
					78.0833333333333f));
			fixedPoints.add(new Point3f(143.977242890511f, -441.671718295901f,
					78.0833333333333f));
			fixedPoints.add(new Point3f(143.977242890511f, -436.671718295901f,
					78.0833333333333f));
			fixedPoints.add(new Point3f(143.977242890511f, -431.671718295901f,
					78.0833333333333f));
			fixedPoints.add(new Point3f(143.977242890511f, -426.671718295901f,
					78.0833333333333f));
			fixedPoints.add(new Point3f(143.977242890511f, -421.671718295901f,
					78.0833333333333f));
			fixedPoints.add(new Point3f(143.977242890511f, -416.671718295901f,
					78.0833333333333f));
			fixedPoints.add(new Point3f(143.977242890511f, -411.671718295901f,
					78.0833333333333f));
			fixedPoints.add(new Point3f(143.977242890511f, -406.671718295901f,
					78.0833333333333f));
			fixedPoints.add(new Point3f(143.977242890511f, -401.671718295901f,
					78.0833333333333f));
			fixedPoints.add(new Point3f(143.977242890511f, -396.671718295901f,
					78.0833333333333f));
			fixedPoints.add(new Point3f(143.977242890511f, -391.671718295901f,
					78.0833333333333f));
			fixedPoints.add(new Point3f(143.977242890511f, -386.671718295901f,
					78.0833333333333f));
			fixedPoints.add(new Point3f(143.977242890511f, -381.671718295901f,
					78.0833333333333f));
			fixedPoints.add(new Point3f(143.977242890511f, -376.671718295901f,
					78.0833333333333f));
			fixedPoints.add(new Point3f(143.653896136302f, -371.995065050111f,
					78.0833333333333f));
			fixedPoints.add(new Point3f(138.653896136302f, -371.995065050111f,
					78.0833333333333f));
			fixedPoints.add(new Point3f(133.653896136302f, -371.995065050111f,
					78.0833333333333f));
			fixedPoints.add(new Point3f(128.653896136302f, -371.995065050111f,
					78.0833333333333f));
			fixedPoints.add(new Point3f(123.653896136302f, -371.995065050111f,
					78.0833333333333f));
			fixedPoints.add(new Point3f(118.653896136302f, -371.995065050111f,
					78.0833333333333f));
			fixedPoints.add(new Point3f(113.653896136302f, -371.995065050111f,
					78.0833333333333f));
			fixedPoints.add(new Point3f(108.653896136302f, -371.995065050111f,
					78.0833333333333f));
			fixedPoints.add(new Point3f(103.653896136302f, -371.995065050111f,
					78.0833333333333f));
			fixedPoints.add(new Point3f(98.6538961363019f, -371.995065050111f,
					78.0833333333333f));
			fixedPoints.add(new Point3f(93.6538961363019f, -371.995065050111f,
					78.0833333333333f));
			fixedPoints.add(new Point3f(88.653896136302f, -371.995065050111f,
					78.0833333333333f));
			fixedPoints.add(new Point3f(85.3005854780553f, -373.641754391864f,
					78.0833333333333f));
			fixedPoints.add(new Point3f(85.3005854780553f, -378.641754391864f,
					78.0833333333333f));
			fixedPoints.add(new Point3f(85.3005854780553f, -383.641754391864f,
					78.0833333333333f));
			fixedPoints.add(new Point3f(85.3005854780553f, -388.641754391864f,
					78.0833333333333f));
			fixedPoints.add(new Point3f(85.3005854780553f, -393.641754391864f,
					78.0833333333333f));
			fixedPoints.add(new Point3f(85.3005854780553f, -398.641754391864f,
					78.0833333333333f));
			fixedPoints.add(new Point3f(85.3005854780553f, -403.641754391864f,
					78.0833333333333f));
			fixedPoints.add(new Point3f(85.3005854780553f, -408.641754391864f,
					78.0833333333333f));
			fixedPoints.add(new Point3f(85.3005854780553f, -413.641754391864f,
					78.0833333333333f));
			fixedPoints.add(new Point3f(85.3005854780553f, -418.641754391864f,
					78.0833333333333f));
			fixedPoints.add(new Point3f(85.3005854780553f, -423.641754391864f,
					78.0833333333333f));
			fixedPoints.add(new Point3f(85.3005854780553f, -428.641754391864f,
					78.0833333333333f));
			fixedPoints.add(new Point3f(85.3005854780553f, -433.641754391864f,
					78.0833333333333f));
			fixedPoints.add(new Point3f(85.3005854780553f, -438.641754391864f,
					78.0833333333333f));
			fixedPoints.add(new Point3f(85.3005854780553f, -443.641754391864f,
					78.0833333333333f));
			fixedPoints.add(new Point3f(85.3005854780553f, -448.641754391864f,
					78.0833333333333f));
			fixedPoints.add(new Point3f(33.4010539973736f, -694.712184767172f,
					97.4771321280175f));
			fixedPoints.add(new Point3f(33.415146780725f, -634.199572138512f,
					104.441182429346f));
			fixedPoints.add(new Point3f(33.4292395640764f, -573.686959509853f,
					111.405232730675f));
			fixedPoints.add(new Point3f(33.4433323474278f, -513.174346881193f,
					118.369283032004f));
			fixedPoints.add(new Point3f(33.4574251307791f, -452.661734252533f,
					125.333333333333f));
			fixedPoints.add(new Point3f(136.017887044622f, -452.366909088285f,
					125.416666666667f));
			fixedPoints.add(new Point3f(136.003794261271f, -512.879521716944f,
					118.452616365338f));
			fixedPoints.add(new Point3f(135.989701477919f, -573.392134345604f,
					111.488566064009f));
			fixedPoints.add(new Point3f(135.975608694568f, -633.904746974264f,
					104.52451576268f));
			fixedPoints.add(new Point3f(135.961515911216f, -694.417359602923f,
					97.5604654613508f));
			fixedPoints.add(new Point3f(195.977818260877f, -693.196026824278f,
					125.416666666667f));
			fixedPoints.add(new Point3f(195.987062444174f, -632.683414195619f,
					118.452616365338f));
			fixedPoints.add(new Point3f(195.996306627471f, -572.170801566959f,
					111.488566064009f));
			fixedPoints.add(new Point3f(196.005550810768f, -511.658188938299f,
					104.52451576268f));
			fixedPoints.add(new Point3f(196.014794994065f, -451.14557630964f,
					97.5604654613508f));
			fixedPoints.add(new Point3f(93.5037542591146f, -451.123889664134f,
					97.5604654613508f));
			fixedPoints.add(new Point3f(93.4945100758175f, -511.636502292794f,
					104.52451576268f));
			fixedPoints.add(new Point3f(93.4852658925204f, -572.149114921453f,
					111.488566064009f));
			fixedPoints.add(new Point3f(93.4760217092233f, -632.661727550113f,
					118.452616365338f));
			fixedPoints.add(new Point3f(195.977818260877f, -693.196026824278f,
					125.416666666667f));
			fixedPoints.add(new Point3f(33.4574251307791f, -452.661734252533f,
					125.333333333333f));
			fixedPoints.add(new Point3f(136.017887044622f, -452.366909088285f,
					125.416666666667f));
			fixedPoints.add(new Point3f(93.4667775259262f, -693.174340178772f,
					125.416666666667f));

			fixPoints(fixedPoints);

		}

		if (option == 7) {
			fixEdges();
			ArrayList<Point3f> fixedPoints = new ArrayList<Point3f>();
			fixedPoints.add(new Point3f(63.4760217092233f, -612.661727550113f,
					65.3333333333333f));
			fixedPoints.add(new Point3f(63.4760217092233f, -572.661727550113f,
					115.333333333333f));
			fixedPoints.add(new Point3f(63.4760217092233f, -653.4691586406f,
					115.333333333333f));
			fixedPoints.add(new Point3f(63.4760217092233f, -491.854296459625f,
					115.333333333333f));
			fixedPoints.add(new Point3f(63.4760217092233f, -531.854296459625f,
					65.3333333333333f));
			fixedPoints.add(new Point3f(63.4760217092233f, -411.046865369138f,
					115.333333333333f));
			fixedPoints.add(new Point3f(63.4760217092233f, -451.046865369138f,
					65.3333333333333f));
			fixedPoints.add(new Point3f(63.4760217092233f, -330.23943427865f,
					115.333333333333f));
			fixedPoints.add(new Point3f(63.4760217092233f, -370.23943427865f,
					65.3333333333333f));
			fixedPoints.add(new Point3f(166.027131227919f, -410.23943427865f,
					65.3333333333333f));
			fixedPoints.add(new Point3f(166.027131227919f, -370.23943427865f,
					115.333333333333f));
			fixedPoints.add(new Point3f(166.027131227919f, -491.046865369138f,
					65.3333333333333f));
			fixedPoints.add(new Point3f(166.027131227919f, -451.046865369138f,
					115.333333333333f));
			fixedPoints.add(new Point3f(166.027131227919f, -571.854296459625f,
					65.3333333333333f));
			fixedPoints.add(new Point3f(166.027131227919f, -531.854296459625f,
					115.333333333333f));
			fixedPoints.add(new Point3f(166.027131227919f, -693.4691586406f,
					115.333333333333f));
			fixedPoints.add(new Point3f(166.027131227919f, -612.661727550113f,
					115.333333333333f));
			fixedPoints.add(new Point3f(166.027131227919f, -652.661727550113f,
					65.3333333333333f));
			fixedPoints.add(new Point3f(85.3005854780553f, -448.641754391864f,
					78.0833333333333f));
			fixedPoints.add(new Point3f(85.3005854780553f, -443.641754391864f,
					78.0833333333333f));
			fixedPoints.add(new Point3f(85.3005854780553f, -438.641754391864f,
					78.0833333333333f));
			fixedPoints.add(new Point3f(85.3005854780553f, -433.641754391864f,
					78.0833333333333f));
			fixedPoints.add(new Point3f(85.3005854780553f, -428.641754391864f,
					78.0833333333333f));
			fixedPoints.add(new Point3f(85.3005854780553f, -423.641754391864f,
					78.0833333333333f));
			fixedPoints.add(new Point3f(85.3005854780553f, -418.641754391864f,
					78.0833333333333f));
			fixedPoints.add(new Point3f(85.3005854780553f, -413.641754391864f,
					78.0833333333333f));
			fixedPoints.add(new Point3f(85.3005854780553f, -408.641754391864f,
					78.0833333333333f));
			fixedPoints.add(new Point3f(85.3005854780553f, -403.641754391864f,
					78.0833333333333f));
			fixedPoints.add(new Point3f(85.3005854780553f, -398.641754391864f,
					78.0833333333333f));
			fixedPoints.add(new Point3f(85.3005854780553f, -393.641754391864f,
					78.0833333333333f));
			fixedPoints.add(new Point3f(85.3005854780553f, -388.641754391864f,
					78.0833333333333f));
			fixedPoints.add(new Point3f(85.3005854780553f, -383.641754391864f,
					78.0833333333333f));
			fixedPoints.add(new Point3f(85.3005854780553f, -378.641754391864f,
					78.0833333333333f));
			fixedPoints.add(new Point3f(85.3005854780553f, -373.641754391864f,
					78.0833333333333f));
			fixedPoints.add(new Point3f(88.653896136302f, -371.995065050111f,
					78.0833333333333f));
			fixedPoints.add(new Point3f(93.6538961363019f, -371.995065050111f,
					78.0833333333333f));
			fixedPoints.add(new Point3f(98.6538961363019f, -371.995065050111f,
					78.0833333333333f));
			fixedPoints.add(new Point3f(103.653896136302f, -371.995065050111f,
					78.0833333333333f));
			fixedPoints.add(new Point3f(108.653896136302f, -371.995065050111f,
					78.0833333333333f));
			fixedPoints.add(new Point3f(113.653896136302f, -371.995065050111f,
					78.0833333333333f));
			fixedPoints.add(new Point3f(118.653896136302f, -371.995065050111f,
					78.0833333333333f));
			fixedPoints.add(new Point3f(123.653896136302f, -371.995065050111f,
					78.0833333333333f));
			fixedPoints.add(new Point3f(128.653896136302f, -371.995065050111f,
					78.0833333333333f));
			fixedPoints.add(new Point3f(133.653896136302f, -371.995065050111f,
					78.0833333333333f));
			fixedPoints.add(new Point3f(138.653896136302f, -371.995065050111f,
					78.0833333333333f));
			fixedPoints.add(new Point3f(143.653896136302f, -371.995065050111f,
					78.0833333333333f));
			fixedPoints.add(new Point3f(143.977242890511f, -376.671718295901f,
					78.0833333333333f));
			fixedPoints.add(new Point3f(143.977242890511f, -381.671718295901f,
					78.0833333333333f));
			fixedPoints.add(new Point3f(143.977242890511f, -386.671718295901f,
					78.0833333333333f));
			fixedPoints.add(new Point3f(143.977242890511f, -391.671718295901f,
					78.0833333333333f));
			fixedPoints.add(new Point3f(143.977242890511f, -396.671718295901f,
					78.0833333333333f));
			fixedPoints.add(new Point3f(143.977242890511f, -401.671718295901f,
					78.0833333333333f));
			fixedPoints.add(new Point3f(143.977242890511f, -406.671718295901f,
					78.0833333333333f));
			fixedPoints.add(new Point3f(143.977242890511f, -411.671718295901f,
					78.0833333333333f));
			fixedPoints.add(new Point3f(143.977242890511f, -416.671718295901f,
					78.0833333333333f));
			fixedPoints.add(new Point3f(143.977242890511f, -421.671718295901f,
					78.0833333333333f));
			fixedPoints.add(new Point3f(143.977242890511f, -426.671718295901f,
					78.0833333333333f));
			fixedPoints.add(new Point3f(143.977242890511f, -431.671718295901f,
					78.0833333333333f));
			fixedPoints.add(new Point3f(143.977242890511f, -436.671718295901f,
					78.0833333333333f));
			fixedPoints.add(new Point3f(143.977242890511f, -441.671718295901f,
					78.0833333333333f));
			fixedPoints.add(new Point3f(143.977242890511f, -446.671718295901f,
					78.0833333333333f));
			fixedPoints.add(new Point3f(143.977242890511f, -451.671718295901f,
					78.0833333333333f));
			fixedPoints.add(new Point3f(140.300585478055f, -452.995060883445f,
					78.0833333333333f));
			fixedPoints.add(new Point3f(135.300585478055f, -452.995060883445f,
					78.0833333333333f));
			fixedPoints.add(new Point3f(130.300585478055f, -452.995060883445f,
					78.0833333333333f));
			fixedPoints.add(new Point3f(125.300585478055f, -452.995060883445f,
					78.0833333333333f));
			fixedPoints.add(new Point3f(120.300585478055f, -452.995060883445f,
					78.0833333333333f));
			fixedPoints.add(new Point3f(115.300585478055f, -452.995060883445f,
					78.0833333333333f));
			fixedPoints.add(new Point3f(110.300585478055f, -452.995060883445f,
					78.0833333333333f));
			fixedPoints.add(new Point3f(105.300585478055f, -452.995060883445f,
					78.0833333333333f));
			fixedPoints.add(new Point3f(100.300585478055f, -452.995060883445f,
					78.0833333333333f));
			fixedPoints.add(new Point3f(95.3005854780553f, -452.995060883445f,
					78.0833333333333f));
			fixedPoints.add(new Point3f(90.3005854780552f, -452.995060883445f,
					78.0833333333333f));
			fixedPoints.add(new Point3f(85.3005854780553f, -452.995060883445f,
					78.0833333333333f));
			fixedPoints.add(new Point3f(97.4183584752479f, -371.995065050111f,
					78.0833333333333f));
			fixedPoints.add(new Point3f(143.977242890511f, -418.553949465374f,
					78.0833333333333f));
			fixedPoints.add(new Point3f(85.3005854780553f, -452.995060883445f,
					78.0833333333333f));

			fixPoints(fixedPoints);
		}

		if (option == 8) {
			fixEdges();
			ArrayList<Point3f> fixedPoints = new ArrayList<Point3f>();
			fixedPoints.add(new Point3f(196.027131227919f, -372.661727550113f,
					115.333333333333f));
			fixedPoints.add(new Point3f(196.027131227919f, -392.661727550113f,
					65.3333333333333f));
			fixedPoints.add(new Point3f(196.027131227919f, -412.661727550113f,
					115.333333333333f));
			fixedPoints.add(new Point3f(196.027131227919f, -713.4691586406f,
					115.333333333333f));
			fixedPoints.add(new Point3f(196.027131227919f, -693.4691586406f,
					65.3333333333333f));
			fixedPoints.add(new Point3f(196.027131227919f, -673.4691586406f,
					115.333333333333f));
			fixedPoints.add(new Point3f(136.027131227919f, -652.661727550113f,
					115.333333333333f));
			fixedPoints.add(new Point3f(136.027131227919f, -672.661727550113f,
					65.3333333333333f));
			fixedPoints.add(new Point3f(136.027131227919f, -692.661727550113f,
					115.333333333333f));
			fixedPoints.add(new Point3f(196.027131227919f, -652.661727550113f,
					115.333333333333f));
			fixedPoints.add(new Point3f(196.027131227919f, -632.661727550113f,
					65.3333333333333f));
			fixedPoints.add(new Point3f(196.027131227919f, -612.661727550113f,
					115.333333333333f));
			fixedPoints.add(new Point3f(33.4760217092233f, -412.661727550113f,
					115.333333333333f));
			fixedPoints.add(new Point3f(33.4760217092233f, -392.661727550113f,
					65.3333333333333f));
			fixedPoints.add(new Point3f(33.4760217092233f, -372.661727550113f,
					115.333333333333f));
			fixedPoints.add(new Point3f(63.4760217092233f, -452.661727550113f,
					115.333333333333f));
			fixedPoints.add(new Point3f(63.4760217092233f, -432.661727550113f,
					65.3333333333333f));
			fixedPoints.add(new Point3f(63.4760217092233f, -412.661727550113f,
					115.333333333333f));
			fixedPoints.add(new Point3f(166.027131227919f, -412.661727550113f,
					115.333333333333f));
			fixedPoints.add(new Point3f(166.027131227919f, -392.661727550113f,
					65.3333333333333f));
			fixedPoints.add(new Point3f(166.027131227919f, -372.661727550113f,
					115.333333333333f));
			fixedPoints.add(new Point3f(196.027131227919f, -492.661727550113f,
					115.333333333333f));
			fixedPoints.add(new Point3f(196.027131227919f, -472.661727550113f,
					65.3333333333333f));
			fixedPoints.add(new Point3f(196.027131227919f, -452.661727550113f,
					115.333333333333f));
			fixedPoints.add(new Point3f(33.4760217092233f, -512.661727550113f,
					115.333333333333f));
			fixedPoints.add(new Point3f(33.4760217092233f, -492.661727550113f,
					65.3333333333333f));
			fixedPoints.add(new Point3f(33.4760217092233f, -472.661727550113f,
					115.333333333333f));
			fixedPoints.add(new Point3f(33.4760217092233f, -572.661727550113f,
					115.333333333333f));
			fixedPoints.add(new Point3f(33.4760217092233f, -552.661727550113f,
					65.3333333333333f));
			fixedPoints.add(new Point3f(33.4760217092233f, -532.661727550113f,
					115.333333333333f));
			fixedPoints.add(new Point3f(136.027131227919f, -532.661727550113f,
					115.333333333333f));
			fixedPoints.add(new Point3f(136.027131227919f, -512.661727550113f,
					65.3333333333333f));
			fixedPoints.add(new Point3f(136.027131227919f, -492.661727550113f,
					115.333333333333f));
			fixedPoints.add(new Point3f(63.4760217092233f, -512.661727550113f,
					115.333333333333f));
			fixedPoints.add(new Point3f(63.4760217092233f, -532.661727550113f,
					65.3333333333333f));
			fixedPoints.add(new Point3f(63.4760217092233f, -552.661727550113f,
					115.333333333333f));
			fixedPoints.add(new Point3f(33.4760217092233f, -592.661727550113f,
					65.3333333333333f));
			fixedPoints.add(new Point3f(33.4760217092233f, -612.661727550113f,
					115.333333333333f));
			fixedPoints.add(new Point3f(33.4760217092233f, -632.661727550113f,
					65.3333333333333f));
			fixedPoints.add(new Point3f(93.4760217092233f, -552.661727550113f,
					65.3333333333333f));
			fixedPoints.add(new Point3f(93.4760217092233f, -572.661727550113f,
					115.333333333333f));
			fixedPoints.add(new Point3f(93.4760217092233f, -592.661727550113f,
					65.3333333333333f));
			fixedPoints.add(new Point3f(215.939444862985f, -552.577348367327f,
					65.4166666666666f));
			fixedPoints.add(new Point3f(215.939444862985f, -572.577348367327f,
					115.416666666667f));
			fixedPoints.add(new Point3f(215.939444862985f, -592.577348367327f,
					65.4166666666666f));
			fixedPoints.add(new Point3f(166.027131227919f, -552.661727550113f,
					65.3333333333333f));
			fixedPoints.add(new Point3f(166.027131227919f, -572.661727550113f,
					115.333333333333f));
			fixedPoints.add(new Point3f(166.027131227919f, -592.661727550113f,
					65.3333333333333f));
			fixedPoints.add(new Point3f(136.027131227919f, -632.661727550113f,
					65.3333333333333f));
			fixedPoints.add(new Point3f(136.027131227919f, -612.661727550113f,
					115.333333333333f));
			fixedPoints.add(new Point3f(136.027131227919f, -592.661727550113f,
					65.3333333333333f));
			fixedPoints.add(new Point3f(63.4760217092233f, -632.661727550113f,
					65.3333333333333f));
			fixedPoints.add(new Point3f(63.4760217092233f, -652.661727550113f,
					115.333333333333f));
			fixedPoints.add(new Point3f(63.4760217092233f, -672.661727550113f,
					65.3333333333333f));
			fixedPoints.add(new Point3f(85.3005854780553f, -452.995060883445f,
					78.0833333333333f));
			fixedPoints.add(new Point3f(143.977242890511f, -418.553949465374f,
					78.0833333333333f));
			fixedPoints.add(new Point3f(97.4183584752479f, -371.995065050111f,
					78.0833333333333f));
			fixedPoints.add(new Point3f(85.3005854780553f, -452.995060883445f,
					78.0833333333333f));
			fixedPoints.add(new Point3f(90.3005854780552f, -452.995060883445f,
					78.0833333333333f));
			fixedPoints.add(new Point3f(95.3005854780553f, -452.995060883445f,
					78.0833333333333f));
			fixedPoints.add(new Point3f(100.300585478055f, -452.995060883445f,
					78.0833333333333f));
			fixedPoints.add(new Point3f(105.300585478055f, -452.995060883445f,
					78.0833333333333f));
			fixedPoints.add(new Point3f(110.300585478055f, -452.995060883445f,
					78.0833333333333f));
			fixedPoints.add(new Point3f(115.300585478055f, -452.995060883445f,
					78.0833333333333f));
			fixedPoints.add(new Point3f(120.300585478055f, -452.995060883445f,
					78.0833333333333f));
			fixedPoints.add(new Point3f(125.300585478055f, -452.995060883445f,
					78.0833333333333f));
			fixedPoints.add(new Point3f(130.300585478055f, -452.995060883445f,
					78.0833333333333f));
			fixedPoints.add(new Point3f(135.300585478055f, -452.995060883445f,
					78.0833333333333f));
			fixedPoints.add(new Point3f(140.300585478055f, -452.995060883445f,
					78.0833333333333f));
			fixedPoints.add(new Point3f(143.977242890511f, -451.671718295901f,
					78.0833333333333f));
			fixedPoints.add(new Point3f(143.977242890511f, -446.671718295901f,
					78.0833333333333f));
			fixedPoints.add(new Point3f(143.977242890511f, -441.671718295901f,
					78.0833333333333f));
			fixedPoints.add(new Point3f(143.977242890511f, -436.671718295901f,
					78.0833333333333f));
			fixedPoints.add(new Point3f(143.977242890511f, -431.671718295901f,
					78.0833333333333f));
			fixedPoints.add(new Point3f(143.977242890511f, -426.671718295901f,
					78.0833333333333f));
			fixedPoints.add(new Point3f(143.977242890511f, -421.671718295901f,
					78.0833333333333f));
			fixedPoints.add(new Point3f(143.977242890511f, -416.671718295901f,
					78.0833333333333f));
			fixedPoints.add(new Point3f(143.977242890511f, -411.671718295901f,
					78.0833333333333f));
			fixedPoints.add(new Point3f(143.977242890511f, -406.671718295901f,
					78.0833333333333f));
			fixedPoints.add(new Point3f(143.977242890511f, -401.671718295901f,
					78.0833333333333f));
			fixedPoints.add(new Point3f(143.977242890511f, -396.671718295901f,
					78.0833333333333f));
			fixedPoints.add(new Point3f(143.977242890511f, -391.671718295901f,
					78.0833333333333f));
			fixedPoints.add(new Point3f(143.977242890511f, -386.671718295901f,
					78.0833333333333f));
			fixedPoints.add(new Point3f(143.977242890511f, -381.671718295901f,
					78.0833333333333f));
			fixedPoints.add(new Point3f(143.977242890511f, -376.671718295901f,
					78.0833333333333f));
			fixedPoints.add(new Point3f(143.653896136302f, -371.995065050111f,
					78.0833333333333f));
			fixedPoints.add(new Point3f(138.653896136302f, -371.995065050111f,
					78.0833333333333f));
			fixedPoints.add(new Point3f(133.653896136302f, -371.995065050111f,
					78.0833333333333f));
			fixedPoints.add(new Point3f(128.653896136302f, -371.995065050111f,
					78.0833333333333f));
			fixedPoints.add(new Point3f(123.653896136302f, -371.995065050111f,
					78.0833333333333f));
			fixedPoints.add(new Point3f(118.653896136302f, -371.995065050111f,
					78.0833333333333f));
			fixedPoints.add(new Point3f(113.653896136302f, -371.995065050111f,
					78.0833333333333f));
			fixedPoints.add(new Point3f(108.653896136302f, -371.995065050111f,
					78.0833333333333f));
			fixedPoints.add(new Point3f(103.653896136302f, -371.995065050111f,
					78.0833333333333f));
			fixedPoints.add(new Point3f(98.6538961363019f, -371.995065050111f,
					78.0833333333333f));
			fixedPoints.add(new Point3f(93.6538961363019f, -371.995065050111f,
					78.0833333333333f));
			fixedPoints.add(new Point3f(88.653896136302f, -371.995065050111f,
					78.0833333333333f));
			fixedPoints.add(new Point3f(85.3005854780553f, -373.641754391864f,
					78.0833333333333f));
			fixedPoints.add(new Point3f(85.3005854780553f, -378.641754391864f,
					78.0833333333333f));
			fixedPoints.add(new Point3f(85.3005854780553f, -383.641754391864f,
					78.0833333333333f));
			fixedPoints.add(new Point3f(85.3005854780553f, -388.641754391864f,
					78.0833333333333f));
			fixedPoints.add(new Point3f(85.3005854780553f, -393.641754391864f,
					78.0833333333333f));
			fixedPoints.add(new Point3f(85.3005854780553f, -398.641754391864f,
					78.0833333333333f));
			fixedPoints.add(new Point3f(85.3005854780553f, -403.641754391864f,
					78.0833333333333f));
			fixedPoints.add(new Point3f(85.3005854780553f, -408.641754391864f,
					78.0833333333333f));
			fixedPoints.add(new Point3f(85.3005854780553f, -413.641754391864f,
					78.0833333333333f));
			fixedPoints.add(new Point3f(85.3005854780553f, -418.641754391864f,
					78.0833333333333f));
			fixedPoints.add(new Point3f(85.3005854780553f, -423.641754391864f,
					78.0833333333333f));
			fixedPoints.add(new Point3f(85.3005854780553f, -428.641754391864f,
					78.0833333333333f));
			fixedPoints.add(new Point3f(85.3005854780553f, -433.641754391864f,
					78.0833333333333f));
			fixedPoints.add(new Point3f(85.3005854780553f, -438.641754391864f,
					78.0833333333333f));
			fixedPoints.add(new Point3f(85.3005854780553f, -443.641754391864f,
					78.0833333333333f));
			fixedPoints.add(new Point3f(85.3005854780553f, -448.641754391864f,
					78.0833333333333f));

			fixPoints(fixedPoints);
		}

		if (option == 9) {
			fixEdges();
			ArrayList<Point3f> fixedPoints = new ArrayList<Point3f>();

			fixPoints(fixedPoints);
		}

		if (option == 10) {
			fixEdges();
			ArrayList<Point3f> fixedPoints = new ArrayList<Point3f>();

			fixPoints(fixedPoints);
		}

	}

	public void xmlLinesOut() {
		Element meshCollection = new Element("graph");
		for (PolyLine p : lines) {
			Element currentLine = new Element("line");
			for (SVert v : p.verts) {
				Element currentVert = new Element("vert");
				currentVert.addContent(new Element("x").addContent(Float
						.toString(v.p.x)));
				currentVert.addContent(new Element("y").addContent(Float
						.toString(-v.p.y)));
				currentVert.addContent(new Element("z").addContent(Float
						.toString(v.p.z)));
				currentLine.addContent(currentVert);
			}
			meshCollection.addContent(currentLine);
		}

		Document myDocument = new Document(meshCollection);

		try {
			XMLOutputter outputter = new XMLOutputter();

			String myFile = "C:/Users/cam/13workspace/shukhov/output/";
			myFile = myFile + "shukovOutLines1" + ".xml";

			FileWriter writer = new FileWriter(myFile);
			outputter.output(myDocument, writer);
			writer.close();
			PApplet.println(myFile);

		} catch (java.io.IOException e) {
			e.printStackTrace();
		}

	}

	public void xmlOut() {

		Element meshCollection = new Element("graph");
		for (SVert v : verts) {
			Element currentVert = new Element("vert");
			currentVert.addContent(new Element("x").addContent(Float
					.toString(v.p.x)));
			currentVert.addContent(new Element("y").addContent(Float
					.toString(-v.p.y)));
			currentVert.addContent(new Element("z").addContent(Float
					.toString(v.p.z)));
			meshCollection.addContent(currentVert);
		}

		Document myDocument = new Document(meshCollection);

		try {
			XMLOutputter outputter = new XMLOutputter();

			String myFile = "C:/Users/cam/13workspace/shukhov/output/";
			myFile = myFile + "shukhovOutPts" + ".xml";

			FileWriter writer = new FileWriter(myFile);
			outputter.output(myDocument, writer);
			writer.close();
			PApplet.println(myFile);

		} catch (java.io.IOException e) {
			e.printStackTrace();
		}
	}

	public ArrayList<Point3f> inPts(String arg) throws IOException {
		ArrayList<Point3f> outPts = new ArrayList<Point3f>();

		try {
			SAXBuilder builder = new SAXBuilder();
			Document inputGraph = builder.build(new File(arg));

			Element root = inputGraph.getRootElement();

			@SuppressWarnings("unchecked")
			java.util.List<Element> allChildren = root.getChildren();

			for (Element elcurrent : allChildren) {

				if (elcurrent.getName() == "vert") {

					float _x = Float
							.valueOf(elcurrent.getChildText("x").trim())
							.floatValue();

					float _y = Float
							.valueOf(elcurrent.getChildText("y").trim())
							.floatValue();
					float _z = Float
							.valueOf(elcurrent.getChildText("z").trim())
							.floatValue();

					Point3f v = new Point3f(_x, _y, _z);

					outPts.add(v);

				}
			}

		} catch (JDOMException e) {
			e.printStackTrace();
		} catch (NullPointerException e) {
			e.printStackTrace();
		}

		return outPts;

	}

	public void inCtrls(String arg) throws IOException {
		ArrayList<Point3f> fixedPoints = new ArrayList<Point3f>();

		try {
			SAXBuilder builder = new SAXBuilder();
			Document inputGraph = builder.build(new File(arg));

			Element root = inputGraph.getRootElement();

			@SuppressWarnings("unchecked")
			java.util.List<Element> allChildren = root.getChildren();

			for (Element elcurrent : allChildren) {

				if (elcurrent.getName() == "vert") {

					float _x = Float
							.valueOf(elcurrent.getChildText("x").trim())
							.floatValue();

					float _y = Float
							.valueOf(elcurrent.getChildText("y").trim())
							.floatValue();
					float _z = Float
							.valueOf(elcurrent.getChildText("z").trim())
							.floatValue();

					Point3f v = new Point3f(_x, _y, _z);

					fixedPoints.add(v);

				}
			}

		} catch (JDOMException e) {
			e.printStackTrace();
		} catch (NullPointerException e) {
			e.printStackTrace();
		}

		fixPoints(fixedPoints);

	}

}
